作为一个分布式的消息发布-订阅系统,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集群管理工具主要支持以下几个功能:
- 管理几个不同的集群;
- 很容易地检查集群的状态(topics, brokers, 副本的分布, 分区的分布);
- 选择副本;
- 产生分区分配(Generate partition assignments)基于集群的当前状态;
- 重新分配分区。
以下是该集群管理工具的截图:
Cluster Management
Topic List
Topic View
Consumer List View
Consumed Topic View
Broker List
Broker View
安装要求
- Kafka 0.8.. or 0.9.. or 0.10.. or 0.11..
- Java 8+
- 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
您好,我使用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 ...
CMAK (Cluster Manager for Apache Kafka, previously known as Kafka Manager) 最高支持到kafka2.4.0版本
您好,我这个启动报错这个怎么解决呀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),请问,您遇到过这种情况吗
客气,但是我印象中这是
info
或debug
输出吧,不是error级别的。可以到问题专区把问题更详细的描述一下,包括错误信息,可以多贴点。
请问这个注解@KafkaListener算不算一个消费者,为啥在kafka manager里面找不到消费者
你好 我用了kafka manger 我的kafka是0.11.0 只能获取到zk中的信息 获取不到kafka中的信息,而且报错 Bootstrap broker server1:9092 disconnectioned 我的启动命令是加了-Djava.security.auth.login.config=/home/kafka-jaas.conf
我的2.12-0.11.0.2版本能用吗
可以
我的2.12-0.11.0.2版本能用吗
楼主好,我的kafka设置SASL 认证,kafka-manager 看不到 offset,需要怎么设置啊?
kafka 用了acl,kafka manager 怎么能读到 topic的信息呢?
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