2.2.1.10 大数据方法论与实践指南-Kafka 使用规范
2.2.1.10 Kafka 使用规范
kafka 使用规范包括(资源隔离,命名规范,存储时间,消费者监控等)及最佳实践 |
2.2.1.10.1 资源隔离规范
目标:确保不同业务或团队之间的 Kafka 资源互不干扰,提升系统稳定性和安全性。
- 物理隔离
- 独立集群部署:为关键业务(如支付、订单)分配独立 Kafka 集群,避免资源争用。
2.2.1.10.2 命名规范
1. Topic 命名
- 字符限制:仅允许小写字母、数字、连字符(-)和句点(.),且以字母开头(如order-stock-update),禁止空格、斜线(/)等特殊符号。
- 长度控制:不超过 255 个字符(推荐≤64 字符),避免过长导致管理困难。
- 业务导向:采用“域-业务-操作”结构,例如:
- 微服务场景:user-service-account-update(用户服务-账户-更新);
- 数据日志场景:log-data-access-log(日志数据-访问日志);
- 地理位置场景:china-region-sales-data(中国区域-销售数据)。
- 禁止系统保留名:避免使用 Kafka 内部 Topic(如_consumer_offsets、_schemas),防止冲突。
2. Consumer Group 命名
- 格式要求:
- 和消费任务名称一致(任务包括离线任务,sparktreaming 实时任务,在线业务等)
- 目的:
- 明确归属,避免跨业务线消费冲突。
- 明确业务和数据消费的
2.2.1.10.3 使用配置
- 存储时间规范
- 为了使消费时间更可控,选择基于时间的保留策略。默认存储 n 天
- 单个 parition 不应超过 10G,否则坏盘回复代价太大
- 分区数规划
- 计算公式:
分区数 = (峰值吞吐量 / 单分区处理能力) × 1.5
示例:
- 峰值吞吐量:500MB/s
- 单分区处理能力:10MB/s
- 分区数 = (500/10)×1.5 = 75 个
2.2.1.10.4 消费者监控&报警规范
1. 内置工具监控
- kafka-consumer-groups.sh:通过命令行查看消费者组状态,输出包括分区分配、Lag 值、消费者实例 ID 等。示例:
Bash |
- 输出字段说明:CURRENT-OFFSET(当前消费位移)、LOG-END-OFFSET(最新消息位移)、LAG(滞后消息数)。
2. JMX+Prometheus+Grafana
- JMX Exporter:暴露 Kafka 消费者的 JMX 指标(如kafka.consumer:type=consumer-fetch-manager-metrics,client-id=*下的records-lag-max、records-consumed-rate);
- Prometheus:收集并存储指标数据;
- Grafana:可视化监控仪表盘,设置警报阈值(如 Lag>10000 时触发告警)。
3. 专用工具监控
- Burrow:Confluent 开发的消费者监控工具,支持实时检测 Lag、消费者离线状态,提供邮件/短信告警;
- Confluent Control Center:商业版监控工具,集成 Kafka 集群管理、性能监控、告警功能,适合企业级场景。
4. 消费者自身监控
- 实现幂等消费:通过消息 ID、数据库唯一索引避免重复处理;
- 记录消费日志:包括消息内容、消费时间、处理结果,便于排查问题;
- 监控消费速率:确保消费者处理能力与生产者发送速率匹配(如消费者速率<生产者速率时,需扩容消费者实例)。
5. 报警:
消费者监控是保障消息及时处理的关键,需重点监控消费延迟(Lag)。
监控实现优劣说明:
- 时间延迟:通过 kafka getOffsetsBefore 函数获取一段时间之前的 offset(因为 kafka 实现原理,此处不准确。大多数情况够用。
- 具体 offset 延迟:在流量不稳定时,下游延迟时间不确定。
- 报警条件(达到任意一个):
- LAG:超过用户配置的延迟时间
- LAG:超过 topic 配置的最长保留时间的 70%(否则有数据丢失风险)
- 报警人:根据 kafka group ID 命名规范,查询服务元数据,给对应的服务 owner 报警。
