CMAK(以前称为 Kafka Manager)是一种用于管理Apache Kafka集群的工具。 有关名称更改的详细信息,请参见下文。

CMAK 支持以下内容:

  • 管理多个集群
  • 轻松检查集群状态(主题、消费者、偏移量、代理、副本分布、分区分布)
  • 运行首选副本选举
  • 使用选择要使用的代理的选项生成分区分配
  • 运行分区的重新分配(基于生成的分配)
  • 使用可选主题配置创建主题(0.8.1.1 与 0.8.2+ 具有不同的配置)
  • 删除主题(仅支持 0.8.2+ 并记住在代理配置中设置 delete.topic.enable=true)
  • 主题列表现在指示标记为删除的主题(仅支持 0.8.2+)
  • 批量生成多个主题的分区分配,可选择要使用的代理
  • 批量运行多个主题的分区重新分配
  • 将分区添加到现有主题
  • 更新现有主题的配置
  • (可选)为代理级别和主题级别指标启用 JMX 轮询。
  • 可选地过滤掉在 zookeeper 中没有 ids/owners/&offsets/ 目录的消费者。

1.集群管理

kafka监控可视化taijisi_java

2.主题列表

kafka监控可视化taijisi_kafka监控可视化taijisi_02

3.主题视图

kafka监控可视化taijisi_apache_03

4.消费者列表视图

kafka监控可视化taijisi_zookeeper_04

5.消费主题视图

kafka监控可视化taijisi_java_05

6. Broker List

kafka监控可视化taijisi_java_06

7.Broker 展示

kafka监控可视化taijisi_kafka_07

要求

Kafka 0.8.. or 0.9.. or 0.10.. or 0.11..
Java 11+

配置

最低配置是用于 CMAK(pka kafka manager)状态的 zookeeper 主机。这可以在 conf 目录中的 application.conf 文件中找到。相同的文件将被打包在分发 zip 文件中;您可以在所需服务器上解压缩文件后修改设置。

cmak.zkhosts="my.zookeeper.host.com:2181"

您可以通过逗号分隔它们来指定多个 zookeeper 主机,如下所示:

cmak.zkhosts="my.zookeeper.host.com:2181,other.zookeeper.host.com:2181"

或者,ZK_HOSTS如果您不想硬编码任何值,请使用环境变量。

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

您可以选择通过修改 application.conf 中的默认列表来启用/禁用以下功能:

application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFeature"]
  • KMClusterManagerFeature - 允许从 CMAK(pka Kafka Manager)添加、更新、删除集群
  • KMTopicManagerFeature - 允许从 Kafka 集群添加、更新、删除主题
  • KMPreferredReplicaElectionFeature - 允许为 Kafka 集群运行首选副本选举
  • KMReassignPartitionsFeature - 允许生成分区分配和重新分配分区

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

cmak.broker-view-thread-pool-size=<3 * number_of_brokers>
cmak.broker-view-max-queue-size=<3 * 所有主题的分区总数>
cmak.broker-view-update-seconds=< cmak.broker-view-max-queue-size / (10 * number_of_brokers) >

以下是具有 10 个代理、100 个主题的 kafka 集群的示例,每个主题有 10 个分区,在启用 JMX 的情况下总共提供 1000 个分区:

cmak.broker-view-thread-pool-size=30
cmak.broker-view-max-queue-size=3000
cmak.broker-view-update-seconds=30

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

cmak.offset-cache-thread-pool-size=<默认为处理器数量>
cmak.offset-cache-max-queue-size=<默认值为 1000>
cmak.kafka-admin-client-thread-pool-size=<默认为处理器数量>
cmak.kafka-admin-client-max-queue-size=<默认值为 1000>

对于启用了消费者轮询的大量消费者,您应该增加上述值。虽然它主要影响基于 ZK 的消费者投票。

Kafka 管理的消费者偏移量现在由“__consumer_offsets”主题中的 KafkaManagedOffsetCache 消费。请注意,这尚未经过跟踪大量偏移的测试。每个集群有一个线程使用此主题,因此它可能无法跟上推送到该主题的大量偏移量。

使用 LDAP 验证用户
警告,您需要使用 CMAK(pka Kafka Manager)配置 SSL,以确保您的凭据不会以未加密的方式传递。通过将用户凭据与 Authorization 标头一起传递,可以使用 LDAP 对用户进行身份验证。LDAP 身份验证在第一次访问时完成,如果成功,则设置 cookie。在下一个请求中,cookie 值与 Authorization 标头中的凭据进行比较。LDAP 支持是通过基本身份验证过滤器实现的。

配置基本认证

basicAuthentication.enabled=true
basicAuthentication.realm=< basic authentication realm>

加密参数(可选,否则在启动时随机生成):

basicAuthentication.salt="some-hex-string-representing-byte-array"
basicAuthentication.iv="some-hex-string-representing-byte-array"
basicAuthentication.secret="my-secret-string"

配置 LDAP/LDAPS 身份验证

basicAuthentication.ldap.enabled=< Boolean flag to enable/disable ldap authentication >
basicAuthentication.ldap.server=< fqdn of LDAP server>
basicAuthentication.ldap.port=< port of LDAP server>
basicAuthentication.ldap.username=< LDAP search username>
basicAuthentication.ldap.password=< LDAP search password>
basicAuthentication.ldap.search-base-dn=< LDAP search base>
basicAuthentication.ldap.search-filter=< LDAP search filter>
basicAuthentication.ldap.connection-pool-size=< number of connection to LDAP server>
basicAuthentication.ldap.ssl=< Boolean flag to enable/disable LDAPS>

(可选)限制对特定 LDAP 组的访问
basicAuthentication.ldap.group-filter=< LDAP group filter>
basicAuthentication.ldap.ssl-trust-all=< Boolean flag to allow non-expired invalid certificates>

示例(在线 LDAP 测试服务器):

basicAuthentication.ldap.enabled=true
basicAuthentication.ldap.server="ldap.forumsys.com"
basicAuthentication.ldap.port=389
basicAuthentication.ldap.username="cn=read-only-admin,dc=example,dc=com"
basicAuthentication.ldap.password="密码"
basicAuthentication.ldap.search-base-dn="dc=example,dc=com"
basicAuthentication.ldap.search-filter="(uid=$capturedLogin$)"
basicAuthentication.ldap.group-filter="cn=allowed-group,ou=groups,dc=example,dc=com"
basicAuthentication.ldap.connection-pool-size=10
basicAuthentication.ldap.ssl=false
basicAuthentication.ldap.ssl-trust-all=false

部署

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

./sbt clean dist

请参阅有关生产部署/配置的播放框架文档。

如果 java 不在您的路径中,或者您需要针对特定的 java 版本进行构建,请使用以下内容(示例假定为 zulu java11):

$ PATH=/usr/lib/jvm/zulu-11-amd64/bin:$PATH \
  JAVA_HOME=/usr/lib/jvm/zulu-11-amd64 \
  /path/to/sbt -java-home /usr/lib/jvm/zulu-11-amd64 clean dist

这可确保首先在正确位置查找路径中的“java”和“javac”二进制文件。接下来,对于所有只侦听 JAVA_HOME 的下游工具,它将它们指向 java11 位置。最后,它告诉 sbt 也使用 java11 位置。

启动服务

解压缩生成的 zipfile 并将工作目录更改为它后,您可以像这样运行服务:

$ bin/cmak

默认情况下,它将选择端口 9000。这是可覆盖的,配置文件的位置也是如此。例如:

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

同样,如果 java 不在您的路径中,或者您需要针对不同版本的 java 运行,请添加 -java-home 选项,如下所示:

$ bin/cmak -java-home /usr/lib/jvm/zulu-11-amd64

使用安全启动服务

要为 SASL 添加 JAAS 配置,请在开始时添加配置文件位置:

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

注意:确保运行 CMAK(pka kafka manager)的用户对 jaas 配置文件具有读取权限

包装

如果您想创建一个 Debian 或 RPM 软件包,您可以运行以下命令之一:

sbt debian:packageBin

sbt rpm:packageBin

消费者/生产者滞后
生产者偏移被轮询。消费者偏移是从基于 Kafka 的消费者的偏移主题中读取的。这意味着报告的滞后可能是负数,因为我们从偏移主题中消耗偏移量比轮询生产者偏移量要快。这是正常现象,不是问题。

从 Kafka Manager 迁移到 CMAK
将配置文件从旧版本复制到新版本(application.conf、consumer.properties)
更改启动脚本以使用 bin/cmak 而不是 bin/kafka-manager

2. 常用参数说明

2.1添加管理kafka集群

包括集群的名字,管理集群的zookeeper地址,kafka的版本

kafka监控可视化taijisi_kafka监控可视化taijisi_08

其中Enable JMX Polling,是否开启 JMX 轮训,该部分直接影响部分 kafka broker 和 topic 监控指标指标的获取(生效的前提是 kafka 启动时开启了 JMX_PORT。主要影响如下之指标的查看:

1.broker/topic 的combined metrics 综合指标

kafka监控可视化taijisi_java_09


kafka监控可视化taijisi_zookeeper_10

2.Poll consumer information

是否开启获取消费信息,直接影响能够在消费者页面和 topic 页面查看消费信息

kafka监控可视化taijisi_java_11


kafka监控可视化taijisi_zookeeper_12

分区信息以及每个分区记录的偏移量,leader个数,每个分区的副本,同步的副本数,是否是首选的leader,是否低于副本

kafka监控可视化taijisi_kafka监控可视化taijisi_13


kafka监控可视化taijisi_apache_14

点击topic页面的Consumers consuming from this topic

kafka监控可视化taijisi_zookeeper_15


kafka监控可视化taijisi_zookeeper_16

消费详情中各字段的含义(Partition:topic的分区,LogSize:分区的总数据,Consumer Offset:分区下已被消费的数据;Lag:分区下剩余的数据。LogSize=Consumer Offset+Lag)

1.Enable Active OffsetCache
是否开启 offset 缓存,决定 kafka-manager 是否缓存住 topic 的相关偏移量。

2.3topic管理

kafka监控可视化taijisi_zookeeper_17


Broker Skew: 反映 broker 的 I/O 压力,broker 上有过多的副本时,相对于其他 broker ,该 broker 频繁的从 Leader 分区 fetch 抓取数据,磁盘操作相对于其他 broker 要多,如果该指标过高,说明 topic 的分区均不不好,topic 的稳定性弱;

Broker Leader Skew:数据的生产和消费进程都至于 Leader 分区打交道,如果 broker 的 Leader 分区过多,该 broker 的数据流入和流出相对于其他 broker 均要大,该指标过高,说明 topic 的分流做的不够好;

Under Replicated: 该指标过高时,表明 topic 的数据容易丢失,数据没有复制到足够的 broker 上。

2.4topic 详情

kafka监控可视化taijisi_kafka_18


Preferred Replicas

分区的副本中,采用副本列表中的第一个副本作为 Leader 的所占的比重

2.5topic 操作

操作 说明
Delete Topic 删除 topic
Reassign Partitions 平衡集群负载
Add Partitions 增加分区
Update Config Topic 配置信息更新
Manual Partition Assignments 手动为每个分区下的副本分配 broker
Generate Partition Assignments 系统自动为每个分区下的副本分配 broker

一般而言,手动调整、系统自动分配分区和添加分区之后,都需要调用?Reassign Partition。
Manual Partition Assignments

一般当有 Broker Skew 时或者 Broker Leader Skew 后可以借助该功能进行调整,本文前面的 Broker Skew 和 Broker Leader Skew 的说明都借助了该工具。

Generate Partition Assignments
该功能一般在批量移动 partition 时比较方便,比如集群新增 broker 或者 topic 新增 partition 后,将分区移动到指定的 broker。

kafka监控可视化taijisi_kafka_19

2.6 消费监控

kafka manager 能够获取到当前消费 kafka 集群消费者的相关信息。

kafka监控可视化taijisi_apache_20


kafka监控可视化taijisi_java_21


kafka监控可视化taijisi_apache_22