问题盘点|使用 Prometheus 监控 Kafka,我们该关注哪些指标

作者:阿里云可观测

Kafka 作为当前广泛使用的中间件产品,承担了重要/核心业务数据流转,其稳定运行关乎整个业务系统可用性。本文旨在分享阿里云 Prometheus 在阿里云 Kafka 和自建 Kafka 的监控实践。

Kafka 简介

Kafka 是什么?

Kafka 是分布式、高吞吐、可扩展的实时数据流平台。

Kafka 广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等大数据领域,已成为大数据生态中不可或缺的部分。

在这里插入图片描述

Producer: 通过 push 模式向 Kafka Broker 发送消息。发送的消息可以是网站的页面访问、服务器日志,也可以是 CPU 和内存相关的系统资源信息。

Kafka Broker: 用于存储消息的服务器。Kafka Broker 支持水平扩展。Kafka Broker 节点的数量越多,集群的吞吐率越高。

Group: 通过 pull 模式从 Kafka Broker 订阅并消费消息。

ZooKeeper: 管理集群的配置、选举领导(Leader)分区,并且在 Group 发生变化时,进行负载均衡。

Kafka 特点

优势

1. 通信模式:持列队和发布/订阅两种通信模式。

2. 高吞吐量、低延迟: 在较廉价的硬件上,Kafka 也能做到每秒处理几十万条消息,延迟最低只有几毫秒。

3. 持久性: Kafka 可以将消息持久化到普通磁盘。

4. 可扩展性: Kafka 集群支持热扩展,可以动态向集群添加新节点。

5. 容错性: 允许集群中节点失败(若副本数量为 n,则允许 n-1 个节点失败)。

需要注意的问题

1. Topic/分区数过多,导致性能急速下降: Kafka Topic/分区过多(如,对于普通磁盘,单机超过 500 个topic/分区),会导致存储碎片化,load 会发生明显的飙高现象,topic/分区越多,load 越高,发送消息响应时间越长。

2. 消息丢失: 以下 2 种使用不当的场景,可能导致消息丢失,应根据业务场景避免。

  • 生产消息:如果 acks!=all 或者消息副本数不大于1,则在Kafka Broker机器异常宕机时,可能导致消息丢失。
  • 消费消息:消费端在未完全处理完消息时即提交offset,则在消费端异常时,可能导致部分消息丢失。

3. 重复消费: 生产者可能由于某种原因(如网络抖动或 Kafka broker 宕机)没有收到 Kafka broker的成功确认,然后重复发送消息,最终导致消费者收到多个相同的业务消息。此场景需要消费者支持的消息幂等性来解决。

4. 消息乱序: Kafka 只能保证同一分区内的消息有序性,不同分区之间消息不能保证有序性。

5. 不支持事务

Kafka 典型适用场景

1. 大数据领域: 网站行为分析、日志聚合、应用监控、流式数据处理、在线和离线数据分析等领域。

2. 数据集成: 将消息导入 MaxCompute、OSS、RDS、Hadoop、HBase 等离线数据仓库。

3. 流计算集成: 与 StreamCompute、E-MapReduce、Spark、Storm 等流计算引擎集成。

Kafka 核心概念

在这里插入图片描述

Broker: 一个 Kafka 服务端节点。

集群(Cluster): 由多个 Broker 组成的集合。

消息(Message): 也叫 Record,Kafka 中信息传递的载体。消息可以是网站的页面访问、服务器的日志,也可以是和 CPU、内存相关的系统资源信息,但对于消息队列 Kafka 版,消息就是一个字节数组。

Producer: 向 Kafka 发送消息的应用。

Consumer: 从 Kafka 接收消息的应用。

消费者组(Consumer Group): 一组具有相同 Group ID 的 Consumer。当一个 Topic 被同一个 Group 的多个 Consumer 消费时,每一条消息都只会被投递到一个 Consumer,实现消费的负载均衡。通过 Group,您可以确保一个 Topic 的消息被并行消费,提高 Kafka 的吞吐量。

主题(Topic): 消息的主题,用于分类消息。在每个 Broker 上都可以创建多个 Topic。

副本(Replica): 每一个分区都有多个副本。当主分区(Leader)故障的时候会选择一个备分区(Follower)上位,成为 Leader。在 Kafka 中默认副本的最大数量是 10 个,且副本的数量不能大于 Broker 的数量,Follower 和 Leader 是在不同的机器,同一机器对同一个分区也只可能存放一个副本。

分区(Partition): 一个有序不变的消息序列,用于存储消息。一个 Topic 由一个或多个分区组成,每个分区中的消息存储于一个或多个 Broker 上。在一个分区中消息的顺序就是 Producer 发送消息的顺序。

位点(Offset): 分区中每条消息的位置信息,是一个单调递增且不变的值。

消费位点: 分区被当前 Consumer 消费了的消息的最大位点。

堆积量: 当前分区下的消息堆积总量,即最大位点减去消费位点的值。堆积量是一个关键指标,如果发现堆积量较大,则 Consumer 可能产生了阻塞,或者消费速度跟不上生产速度。此时需要分析 Consumer 的运行状况,尽力提升消费速度。可以清除所有堆积消息,从最大位点开始消费,或按时间点进行位点重置。

重平衡(Rebalance): 消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

Zookeeper: Kafka 集群依赖 Zookeeper 来保存集群的的元信息,以保证系统的可用性。

主要 Kafka 版本介绍

  • 0.x:早期孵化版本。
  • 1.x:优化 Streams API、增强可观测性和可调试性、支持 Java9、优化 SASL 认证等、优化 Controller 管理等。
  • 2.x:性能显著提升、增强 ACL 支持、支持 OAuth2 bearer、支持动态更新 SSL、增强可观察能力、支持 Java 11(不再支持 Java 7)、支持增量协作再平衡等。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值