Kafka,是目前最流行的分布式消息队列,由LinkedIn公司开发,后来,贡献给了Apache基金会。它,以高吞吐量、低延迟、可扩展、高可靠等特点,广泛应用于,日志收集、实时计算、事件驱动、数据管道等场景。

但是,Kafka本身,提供的命令行工具,功能比较有限,使用起来,也不太方便。比如,查看topic列表,查看消费进度,管理分区和副本,这些操作,用命令行,都比较繁琐。

在实际工作中,我用过不少,Kafka相关的工具。今天,就给大家推荐几款,我觉得,比较好用的,能提升效率的Kafka工具。

一、管理工具

管理工具,主要用来,管理Kafka的topic、分区、副本、配置等。

1. Kafka Manager

Kafka Manager,是Yahoo公司开源的,Kafka集群管理工具。它,应该是,目前最流行的Kafka管理工具了。

Kafka Manager,提供了,Web界面,可以方便地,查看集群的状态,管理topic,查看分区和副本的分布,查看消费组的消费进度,等等。

用Kafka Manager,你可以:

  • 查看集群的broker列表,以及每个broker的状态
  • 创建、删除、修改topic
  • 查看topic的分区和副本分布
  • 重新分配分区和副本
  • 查看消费组的消费进度和延迟
  • 查看topic的消息流入和流出速率

Kafka Manager,功能比较全面,界面也比较友好。对于,Kafka的日常管理,非常有帮助。

不过,Kafka Manager,也有一些不足。比如,界面,比较老旧,看起来,不太美观。而且,最近几年,更新比较慢,对Kafka新版本的一些特性,支持得不够及时。

但是,总体来说,Kafka Manager,还是一款,非常好用的Kafka管理工具,值得推荐。

2. Kafka Eagle

Kafka Eagle,是国内开发者,开源的Kafka监控和管理工具。它,在功能上,和Kafka Manager类似,但是,界面,更美观,功能,也更丰富。

Kafka Eagle,支持,多集群管理,可以同时,管理多个Kafka集群。它,提供了,丰富的监控图表,可以查看,集群的消息流入流出速率,broker的CPU、内存、磁盘使用率,topic的消息量,消费组的延迟,等等。

而且,Kafka Eagle,还支持,告警功能。你可以设置,告警规则,当某个指标,超过阈值时,自动发送告警邮件。这对于,Kafka的运维,非常有帮助。

另外,Kafka Eagle,还支持,SQL查询。你可以用SQL语句,查询Kafka中的消息,查看消息的内容。这对于,调试和排查问题,非常方便。

总体来说,Kafka Eagle,是一款,功能丰富,界面美观的Kafka监控和管理工具。如果你,需要一款,全能的Kafka管理工具,Kafka Eagle,是一个不错的选择。

3. Confluent Control Center

Confluent Control Center,是Confluent公司,提供的,Kafka企业级管理工具。它,是商业软件,需要付费,但是,功能,非常强大。

Confluent Control Center,提供了,非常全面的,Kafka集群管理和监控功能。包括,集群健康检查,topic管理,消费组管理,Schema Registry管理,Kafka Connect管理,等等。

而且,它,还提供了,数据流的监控和追踪功能。你可以看到,消息,从生产,到消费,整个流程的,延迟和吞吐量。这对于,排查问题,优化性能,非常有帮助。

另外,Confluent Control Center,还支持,告警和通知功能。你可以设置,各种告警规则,当出现问题时,及时通知你。

如果,你的公司,预算充足,需要一款,企业级的Kafka管理工具,那么,Confluent Control Center,绝对值得考虑。

二、监控工具

监控工具,主要用来,监控Kafka集群的运行状态,及时发现问题。

1. Prometheus + Grafana + JMX Exporter

这是,目前最流行的,Kafka监控方案。Prometheus,是一个,时序数据库,用来存储监控数据。Grafana,是一个,数据可视化工具,用来展示监控图表。JMX Exporter,是一个,Java代理,用来采集Kafka的JMX指标,暴露给Prometheus。

这套方案,非常灵活,可扩展性强。你可以,根据自己的需求,自定义监控指标和告警规则。而且,Prometheus和Grafana,都是开源的,免费的,社区,也非常活跃。

用这套方案,你可以监控:

  • Broker的CPU、内存、磁盘、网络使用率
  • Topic的消息流入流出速率
  • 分区的副本同步状态
  • 消费组的消费进度和延迟
  • 请求的延迟和错误率

而且,Grafana,有很多,现成的Kafka监控仪表盘模板,你可以直接导入使用,非常方便。

如果你,已经在用Prometheus和Grafana,监控其他系统,那么,用这套方案,监控Kafka,是顺理成章的事情。

2. Burrow

Burrow,是LinkedIn公司,开源的,Kafka消费组监控工具。它,专门用来,监控Kafka消费组的消费延迟。

Burrow,会自动发现,Kafka集群中的,所有消费组和topic,然后,持续监控,每个消费组,在每个topic上的,消费进度和延迟。

和传统的,基于阈值的告警不同,Burrow,使用了,一种,基于统计的,评估方法。它,会根据,消费延迟的变化趋势,来判断,消费组是否正常。这样,可以减少,误报和漏报。

Burrow,提供了,HTTP API,可以查询,消费组的状态。而且,它,还支持,多种告警方式,比如,邮件、Slack、PagerDuty等。

如果,你有很多,Kafka消费组,需要监控它们的消费延迟,那么,Burrow,是一个,非常好的选择。

三、客户端工具

客户端工具,主要用来,生产和消费Kafka消息,调试和测试。

1. Kafka Tool

Kafka Tool,是一个,图形化的,Kafka客户端工具。它,有Windows、Mac、Linux版本,安装和使用,都很简单。

用Kafka Tool,你可以:

  • 连接到Kafka集群,查看broker、topic、消费组
  • 查看topic的分区和副本信息
  • 浏览topic中的消息,查看消息的key、value、offset、时间戳
  • 生产消息,发送到指定的topic
  • 消费消息,从指定的offset开始消费
  • 查看消费组的消费进度

Kafka Tool,界面,比较友好,功能,也比较全面。对于,日常的Kafka调试和测试,非常有帮助。

不过,Kafka Tool,是商业软件,个人使用,免费,但是,商业使用,需要付费。而且,免费版,有一些功能限制。

但是,对于,大多数开发者来说,免费版的功能,已经够用了。

2. kafkacat

kafkacat,是一个,命令行的,Kafka客户端工具。它,比Kafka自带的命令行工具,更强大,更易用。

kafkacat,支持,生产模式和消费模式。你可以用它,快速地,生产消息,消费消息,查看topic的元数据。

比如,消费一个topic的消息:

kafkacat -b broker:9092 -t my-topic

生产一条消息:

echo "hello world" | kafkacat -b broker:9092 -t my-topic -P

查看topic的分区信息:

kafkacat -b broker:9092 -L -t my-topic

kafkacat,还支持,很多高级功能,比如,指定offset消费,指定分区消费,消息格式化,等等。

如果你,喜欢用命令行,那么,kafkacat,绝对是,一款,必备的Kafka工具。

3. Kafka REST Proxy

Kafka REST Proxy,是Confluent公司,开源的,Kafka REST代理。它,提供了,RESTful API,让你,可以通过HTTP协议,生产和消费Kafka消息。

这对于,那些,不方便直接使用Kafka原生客户端的场景,非常有用。比如,你用的语言,没有Kafka客户端,或者,你的应用,在防火墙后面,无法直接连接Kafka集群。

通过Kafka REST Proxy,你只需要,发送HTTP请求,就可以生产和消费消息。非常方便。

而且,Kafka REST Proxy,还支持,Avro和Schema Registry。你可以用它,生产和消费,Avro格式的消息。

如果,你有,通过HTTP访问Kafka的需求,那么,Kafka REST Proxy,是一个,很好的选择。

四、其他实用工具

除了,上面介绍的,管理、监控、客户端工具,还有一些,其他的,实用的Kafka工具。

1. Kafka Connect

Kafka Connect,是Kafka自带的,数据集成工具。它,可以方便地,把数据,从其他系统,导入到Kafka,或者,从Kafka,导出到其他系统。

Kafka Connect,提供了,两种模式:Source和Sink。Source,用来,从其他系统,导入数据到Kafka。Sink,用来,从Kafka,导出数据到其他系统。

而且,Kafka Connect,有很多,现成的连接器(Connector),支持,MySQL、PostgreSQL、MongoDB、Elasticsearch、S3、HDFS等,几乎所有的,主流数据系统。你只需要,配置一下,就可以使用,不需要,自己写代码。

如果,你需要,把Kafka和其他数据系统,集成起来,那么,Kafka Connect,绝对是,首选工具。

2. Schema Registry

Schema Registry,是Confluent公司,开源的,Kafka Schema管理工具。它,用来,管理Kafka消息的Schema(模式),支持,Avro、JSON Schema、Protobuf等格式。

用Schema Registry,你可以:

  • 注册和管理,消息的Schema
  • 生产消息时,自动验证,消息是否符合Schema
  • 消费消息时,自动反序列化,消息
  • 管理Schema的版本,支持Schema的演进

Schema Registry,对于,保证Kafka消息的,数据质量和兼容性,非常有帮助。特别是,在微服务架构中,多个服务,通过Kafka通信,Schema Registry,可以避免,因为消息格式不兼容,导致的问题。

如果,你的Kafka消息,有固定的格式,而且,需要,保证兼容性,那么,Schema Registry,值得使用。

3. MirrorMaker

MirrorMaker,是Kafka自带的,跨集群数据同步工具。它,可以把,一个Kafka集群的消息,同步到,另一个Kafka集群。

MirrorMaker,常用于,以下场景:

  • 跨数据中心,数据同步
  • 集群迁移,把旧集群的数据,同步到新集群
  • 灾备,把主集群的数据,同步到备集群
  • 数据聚合,把多个小集群的数据,同步到一个大集群

MirrorMaker,使用起来,比较简单。你只需要,配置,源集群和目标集群的地址,以及,需要同步的topic,就可以了。

不过,MirrorMaker,也有一些不足。比如,不支持,动态添加topic,不支持, exactly once 语义。如果,你有更复杂的,跨集群同步需求,可以考虑,使用Confluent的Replicator,或者,其他的,第三方工具。

五、写在最后

以上,就是我,在实际工作中,用过的,觉得比较好用的,Kafka工具。当然,Kafka相关的工具,还有很多,我不可能,全部都介绍到。这里,只是,挑了一些,我觉得,比较有代表性的,推荐给大家。

选择工具的时候,要根据,自己的实际需求和场景,来选择。不要,盲目追求,功能多,界面好。适合自己的,才是最好的。

而且,工具,只是辅助。更重要的,是,理解Kafka的原理和架构,掌握Kafka的核心概念。只有,理解了原理,才能,更好地使用工具,排查问题,优化性能。

希望这篇文章,能给大家,带来一些帮助。如果你,有其他,好用的Kafka工具,欢迎在评论区留言,我们一起交流。