点击上方蓝色字体,选择“设为星标”
回复”面试“获取更多惊喜
前言
一般情况下,我们都习惯使用kafka-topics.sh脚本来管理主题,但有些时候我们希望将主题管理类的功能集成到公司内部的系统中,打造集管理、监控、运维、告警为一体的生态平台,那么就需要以程序调用API的方式去实现。
Kafka社区于0.11版本正式推出了Java客户端版的AdminClient,并不断地在后续的版本中对它进行完善。
本文主要介绍KafkaAdminClient 的基本使用方式,以及采用这种调用API方式下的创建主题时的合法性验证。
功能
鉴于社区还在不断地完善 AdminClient 的功能,AdminClient 提供的功能有以下几个大类。
主题管理:包括主题的创建、删除和查询。
权限管理:包括具体权限的配置与删除。
配置参数管理:包括 Kafka 各种资源的参数设置、详情查询。所谓的 Kafka 资源,主要有 Broker、主题、用户、Client-id 等。
副本日志管理:包括副本底层日志路径的变更和详情查询。
分区管理:即创建额外的主题分区。
消息删除:即删除指定位移之前的分区消息。
Delegation Token 管理:包括 Delegation Token 的创建、更新、过期和详情查询。
消费者组管理:包括消费者组的查询、位移查询和删除。
Preferred 领导者选举:推选指定主题分区的 Preferred Broker 为领导者。
工作原理
AdminClient 是一个双线程的设计:前端主线程和后端 I/O 线程。
前端线程负责将用户要执行的操作转换成对应的请求,然后再将请求发送到后端 I/O 线程的队列中。
而后端 I/O 线程(kafka-admin-client-thread)从队列中读取相应的请求,然后发送到对应的 Broker 节点上,之后把执行结果保存起来,以便等待前端线程的获取。
使用
如果你使用的是 Maven,需要增加以下依赖项:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.6.5</version>
</