Kafka Manager

原创
半兽人 发表于: 2015-03-10   最后更新时间: 2021-12-06 15:37:07  
{{totalSubscript}} 订阅, 25,553 游览

作为一个分布式的消息发布-订阅系统,Apache Kafka在 Yahoo内部已经被很多团队所使用,例如媒体分析团队就将其应用到了实时分析流水线中,同时,Yahoo整个Kafka集群处理的峰值带宽超过了 20Gbps(压缩数据)。为了让开发者和服务工程师能够更加简单地维护Kafka集群,Yahoo构建了一个基于Web的管理工具,称为Kafka Manager,日前该项目已经在GitHub上开源

通过Kafka Manager用户能够更容易地发现集群中哪些主题或者分区分布不均匀,同时能够管理多个集群,能够更容易地检查集群的状态,能够创建主题,执行首选的副 本选择,能够基于集群当前的状态生成分区分配,并基于生成的分配执行分区的重分配,此外,Kafka Manager还是一个非常好的可以快速查看集群状态的工具。

Kafka Manager使用Scala语言编写,其Web控制台基于Play Framework实现,除此之外,Yahoo还迁移了一些Apache Kafka的帮助程序以便能够与Apache Curator框架一起工作。

Kafka在雅虎

Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽。

为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager。这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。它支持管理多个集群、选择副本、副本重新分配以及创建Topic。同时,这个管理工具也是一个非常好的可以快速浏览这个集群的工具。

该软件是用Scala语言编写的。目前(2015年02月03日)雅虎已经开源了Kafka Manager工具。这款Kafka集群管理工具主要支持以下几个功能:

  1. 管理几个不同的集群;
  2. 很容易地检查集群的状态(topics, brokers, 副本的分布, 分区的分布);
  3. 选择副本;
  4. 产生分区分配(Generate partition assignments)基于集群的当前状态;
  5. 重新分配分区。

以下是该集群管理工具的截图:

Cluster Management

集群


Topic List

topic列表


Topic View

topic明细


Consumer List View

消费者列表


Consumed Topic View

Consumed Topic View


Broker List

broker列表


Broker View

broker

安装要求

  1. Kafka 0.8.. or 0.9.. or 0.10.. or 0.11..
  2. Java 8+
  3. sbt 0.13.x

配置

系统至少需要配置zookeeper集群的地址,可以在kafka-manager安装包的conf目录下面的application.conf文件中进行配置。例如:

kafka-manager.zkhosts="my.zookeeper.host.com:2181"

你可以指定多个zookeeper地址,用逗号分隔:

kafka-manager.zkhosts="my.zookeeper.host.com:2181,other.zookeeper.host.com:2181"

另外, 如果你不想硬编码,可以使用环境变量ZK_HOSTS。

ZK_HOSTS="my.zookeeper.host.com:2181"

你可以启用/禁止以下的功能,通过修改application.config:

application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature"]
  • KMClusterManagerFeature - 允许从Kafka Manager添加,更新,删除集群。
  • KMTopicManagerFeature - 允许从Kafka集群中增加,更新,删除topic
  • KMPreferredReplicaElectionFeature - 允许为Kafka集群运行首选副本
  • KMReassignPartitionsFeature - 允许生成分区分配和重新分配分区

考虑为启用了jmx的大群集设置这些参数:

  • kafka-manager.broker-view-thread-pool-size=< 3 * number_of_brokers>
  • kafka-manager.broker-view-max-queue-size=< 3 * total # of partitions across all topics>
  • kafka-manager.broker-view-update-seconds=< kafka-manager.broker-view-max-queue-size / (10 * number_of_brokers) >

下面是一个包含10个broker,100个topic的kafka集群示例,每个topic有10个分区,相当于1000个总分区,并启用JMX:

  • kafka-manager.broker-view-thread-pool-size=30
  • kafka-manager.broker-view-max-queue-size=3000
  • kafka-manager.broker-view-update-seconds=30

控制消费者偏offset缓存的线程池和队列:

  • kafka-manager.offset-cache-thread-pool-size=< default is # of processors>
  • kafka-manager.offset-cache-max-queue-size=< default is 1000>
  • kafka-manager.kafka-admin-client-thread-pool-size=< default is # of processors>
  • kafka-manager.kafka-admin-client-max-queue-size=< default is 1000>

您应该在启用了消费者轮询的情况下为大量#消费者增加以上内容。虽然它主要影响基于ZK的消费者轮询。

Kafka管理的消费者offset现在由“__consumer_offsets”topic中的KafkaManagedOffsetCache消费。请注意,这尚未经过跟踪大量offset的测试。每个集群都有一个单独的线程消费这个topic,所以它可能无法跟上被推送到topic的大量offset。

部署

下面的命令创建一个可部署应用的zip文件。

sbt clean dist

如果你不想拉源码,在编译,我已经编译好,放在百度云盘上了。

https://pan.baidu.com/s/1geEB1rt

启动服务

解压刚刚的zip文件,然后启动它:

$ bin/kafka-manager

默认情况下,端口为9000。可覆盖,例如:

$ bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080

再如果java不在你的路径中,或你需要针对不同的版本,增加-java-home选项:

$ bin/kafka-manager -java-home /usr/local/oracle-java-8

用安全启动服务

为SASL添加JAAS配置,添加配置文件位置:

$ bin/kafka-manager -Djava.security.auth.login.config=/path/to/my-jaas.conf

注意:确保运行kafka manager的用户有读取jaas配置文件的权限。

打包

如果你想创建一个Debian或者RPM包,你可以使用下面命令打包:

sbt debian:packageBin
sbt rpm:packageBin
更新于 2021-12-06
在线,2小时前登录

…… 1年前

您好,我使用docker安装了kafka(2.8.1)和kafka manager,并且开启了JMX(端口:9999),kafka manager可以成功连上。但是使用kafka命令时遇到问题,请问这个需要怎么解决下:
Error: JMX connector server communication error: service:jmx:rmi://f4d70774e91c:9999
jdk.internal.agent.AgentConfigurationError: java.rmi.server.ExportException: Port already in use: 9999; nested exception is ...

Season 2年前

CMAK (Cluster Manager for Apache Kafka, previously known as Kafka Manager) 最高支持到kafka2.4.0版本

独爱一篇文 4年前

您好,我这个启动报错这个怎么解决呀This application is already running (Or delete /usr/local/kafka-manager-1.3.3.15/RUNNING_PID file).

如果是启动的最后一句,是已经启动了。
如果刚运行就刷这个,然后服务中断,说明已经启动过程序了,你需要kill掉之前的。
可以通过jps或者ps -ef|grep kafka查看相应的进程。(注意,如果和kafka装在一起,则要区分是kafka还是kafka manager)

谢谢您的热心回复,这个问题解决后,又报zookeeper的问题,Will not attempt to authenticate using SASL (unknown error),请问,您遇到过这种情况吗

客气,但是我印象中这是infodebug输出吧,不是error级别的。
可以到问题专区把问题更详细的描述一下,包括错误信息,可以多贴点。

大白 4年前

请问这个注解@KafkaListener算不算一个消费者,为啥在kafka manager里面找不到消费者

Get 5年前

你好 我用了kafka manger 我的kafka是0.11.0  只能获取到zk中的信息 获取不到kafka中的信息,而且报错 Bootstrap broker server1:9092 disconnectioned 我的启动命令是加了-Djava.security.auth.login.config=/home/kafka-jaas.conf

0.0 6年前

我的2.12-0.11.0.2版本能用吗

半兽人 -> 0.0 6年前

可以

0.0 6年前

我的2.12-0.11.0.2版本能用吗

冷水河 6年前

楼主好,我的kafka设置SASL 认证,kafka-manager 看不到 offset,需要怎么设置啊?

. 6年前

kafka 用了acl,kafka manager 怎么能读到 topic的信息呢?

ighack 6年前

kafka-manger谁有打包好了的啊,我在网上找的打包好的版本太低不支持kafka0.10.1。自己git以后打包不行。经常性报错,就行换在国内的源还是报错

[error] Server access Error: Software caused connection abort: recv failed url=h
ttps://repo.typesafe.com/typesafe/ivy-releases/org.webjars/es6-promise-parent/2.1.1/jars/es6-promise-parent.jar。

我还在网上找了一些VPN也不行。那位大神能有新一点切编译好的的JAR包给我啊。igyu@21cn.com

查看kafka更多相关的文章或提一个关于kafka的问题,也可以与我们一起分享文章