1. 为什么做Kafka监控?
Kafka以集群为中心的设计提供了强大的耐用性和容错性。而且,由于Kafka是一个分布式系统,因此主题在多个节点之间进行分区和复制。如果同时采取性能监控并能对问题及时发出警报,Kafka可以成为数据集成的极具吸引力的选择。当有Kafka问题需要处理时,应用程序管理器会收集所有性能指标并向需要采取纠正措施的设备发出警报。
pic
监控目的包括但不限于:
a. 追踪系统资源利用率
为了确保不会耗尽资源,“追踪系统资源利用率”会自动监控Kafka服务器,并跟踪资源利用率详细信息,如内存,CPU和磁盘随时间的增长。该工具确保你的Apache Kafka服务器已启动并按预期持续运行,只要资源消耗突然激增或出现异常现象,它就可以快速给你发出通知。
b. 监控线程和JVM使用率
Kafka依赖于Java垃圾收集进程来释放内存,因为它在Java虚拟机(JVM)中运行。垃圾收集运行的频率越高,Kafka集群中的活动就越多。请确保启动的线程不会使服务器的内存过载,同时确保跟踪JVM堆的大小。此外,为了防止系统中出现性能瓶颈,请使用守护进程,峰值和活动线程数等指标跟踪线程使用情况。
c. 理解代理、控制器和复制策略
在Kafka集群中,有一个代理充当控制器,该控制器负责管理分区和副本的状态以及执行管理任务(如重新分配分区)。控制器监视代理的日志刷新延迟 – 但是,日志写到磁盘所需的时间越长,管道就越容易故障。此外,要了解复制是否与配置的一样快,它会跟踪未复制的分区。
d. 监控网络和主题的详细信息
全面了解主机上的网络使用情况,跟踪网络吞吐量,汇总代理主题上的输入和输出字节速率,以获取有关潜在瓶颈的更多信息,并做出明智的决定。
e. 更快的修复性能问题
如果Apache Kafka的组件存在性能问题,你需要立刻得到通知。找出导致过度负载的应用程序,并注意性能瓶颈。在最终用户遇到这样的问题之前,请赶快修复。
2. Kafka指标和警报
Kafka使用Yammer Metrics在服务器和Scala客户端中产生指标报告。Java客户端使用Kafka Metrics,这是一种内置的指标标准注册表,可最大限度地减少传入客户端应用程序的传递依赖性。两者都通过JMX公开指标,并且可以配置为使用可插入的统计报告来报告统计数据,以连接到你的监控系统。
所有Kafka速率指标都有相应的累积计数指标,后缀为“-total”,例如,records-consumed-rate的对应指标为records-consume-total。
具体的指标列表请参考:Kafka文档,第6.6 章节Monitoring
3. 其他监控信息
强烈建议监控GC时间和其他统计信息以及CPU利用率,I/O服务时间等各种服务器统计信息。此外,建议监控消息/字节速率(全局和每个主题),请求的速率/大小/时间。在消费者方面,监控客户端的所有分区中的消息的最大延迟和最小获取请求率。
4. Kafka监控审计
但是,最重要是数据传递的正确性。我们需要审计每条消息都会被所有消费者读取,并测量延迟情况。此外,对于重要主题,如果在某个时间段内消息不能完全传送则会发出警报。
5. Kafka监控工具
基本上,JMX支持的监控工具都可以监控Kafka集群,其中包括:
pic
a. check_kafka.pl
这个工具能执行一个完整的端对端的测试,例如,它作为生产者向Kafka插入一条消息,然后又作为消费者端读取这条消息。
b. KafkaOffsetMonitor
这个工具帮助我们监控Kafka消费者和它们所记录的队列的偏移量,它提高了我们对队列如何增长的理解,并告诉我们那些消费者组滞后了。
c. Burrow
Burrow是最聪明的工具,由LinkedIn人员开发的。它分析一段时间内的消费者偏移量和滞后情况并确定消费者状态。我们可以通过HTTP端点检索此状态,然后将其作为插件集成到我们最喜欢的监视工具中。
d. Yahoo’s Kafka-Manager
它能执行一些基本的监控操作,它更像是一个管理工具。