Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

32 | KafkaAdminClient:Kafka的运维利器

后端I/O线程
前端主线程
Gradle
Maven
需要使用Kafka服务器端的代码
直连ZooKeeper可能绕过Kafka的安全设置
无法集成到应用程序、运维框架或监控平台中
获取Broker磁盘占用
查询消费者组位移
创建主题
销毁AdminClient实例
创建AdminClient实例
生产者-消费者模式
双线程设计
Preferred领导者选举
消费者组管理
Delegation Token管理
消息删除
分区管理
副本日志管理
配置参数管理
权限管理
主题管理
增加依赖项
命令行脚本弊端
开放讨论
小结
常见的AdminClient应用实例
构造和销毁AdminClient实例
工作原理
功能
如何使用
引入原因
KafkaAdminClient

该思维导图由 AI 生成,仅供参考

你好,我是胡夕。今天我要和你分享的主题是:Kafka 的运维利器 KafkaAdminClient。

引入原因

在上一讲中,我向你介绍了 Kafka 自带的各种命令行脚本,这些脚本使用起来虽然方便,却有一些弊端。
首先,不论是 Windows 平台,还是 Linux 平台,命令行的脚本都只能运行在控制台上。如果你想要在应用程序、运维框架或是监控平台中集成它们,会非常得困难。
其次,这些命令行脚本很多都是通过连接 ZooKeeper 来提供服务的。目前,社区已经越来越不推荐任何工具直连 ZooKeeper 了,因为这会带来一些潜在的问题,比如这可能会绕过 Kafka 的安全设置。在专栏前面,我说过 kafka-topics 脚本连接 ZooKeeper 时,不会考虑 Kafka 设置的用户认证机制。也就是说,任何使用该脚本的用户,不论是否具有创建主题的权限,都能成功“跳过”权限检查,强行创建主题。这显然和 Kafka 运维人员配置权限的初衷背道而驰。
最后,运行这些脚本需要使用 Kafka 内部的类实现,也就是 Kafka服务器端的代码。实际上,社区还是希望用户只使用 Kafka客户端代码,通过现有的请求机制来运维管理集群。这样的话,所有运维操作都能纳入到统一的处理机制下,方便后面的功能演进。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

KafkaAdminClient是Kafka的重要运维工具,通过Java客户端提供了丰富的功能,包括主题管理、权限管理、配置参数管理等。其双线程设计使得前端主线程负责用户操作转换成请求,后端I/O线程负责发送请求到Broker节点并保存执行结果。文章提供了创建主题、查询消费者组位移、获取Broker磁盘占用等实例,帮助读者快速了解如何应用AdminClient。通过示例代码展示了如何使用AdminClient创建主题、查询消费者组位移、获取Broker磁盘占用等功能。建议读者时刻关注AdminClient的功能完善情况,统一使用AdminClient执行Kafka集群管理操作,摒弃连接ZooKeeper的工具。欢迎读者思考如何使用AdminClient去增加某个主题的分区,并分享文章给朋友进行讨论。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(25)

  • 最新
  • 精选
  • itzzy
    可视化kafka管理工具,老师能推荐下吗?能支持2.0+版本 感谢!

    作者回复: kafka manager

    2019-08-17
    5
    15
  • QQ怪
    想问下老师,在kafka某个topic下不小心创建了多个不用的消费组,怎么删除掉不用的消费组呢?

    作者回复: 弃之不用,Kafka会自动删除它们的

    2019-08-15
    9
  • 蒙开强
    老师,你好,这个只是提供了API是吧,那要是想可视化工具,还得基于它写代码是么

    作者回复: 嗯嗯,是的

    2019-08-15
    2
    5
  • 胡小禾
    是不是存在有 高版本的 AdminClient 不能兼容低版本的 broker的问题? 我记得调用 2.x 的 AdminClient API去触发低版本(0.8.x.x)broker的reassign,会报错提示 “这个操作不被支持”

    作者回复: 对的,不兼容。我记得只有在0.10.2.1之后才实现双向兼容

    2020-05-26
    2
  • Unity
    老师 请问 org.apache.kafka 的kafka-clients 和 kafka_{scala版本号}这两个jar包的区别是啥 ?

    作者回复: 前者是Clients端代码,后者是Server端代码

    2019-08-26
    2
    2
  • 张三丰
    这句话没懂,就算引入了其它两个队列,也无法避免锁阻塞啊,放进新请求队列的时候是一定会存在锁争用的。我完全可以开启一个后台IO线程直接消费新请求的队列,因为新请求队列一定是有序且线程安全的。 为了确保前端主线程不会因为 monitor 锁被阻塞,后端 I/O 线程会定期地将新请求队列中的所有 Call 实例全部搬移到待发送请求队列中进行处理。

    作者回复: 我的意思是,至少不用Kafka自己实现线程同步了,交由Java类自行处理就好

    2020-11-04
    1
  • hunterlodge
    老师,请问怎么采集consumer group的性能指标呢?比如消息堆积数,需要了解到消费应用程序的JMX端口才能采集吗?

    作者回复: 是的,典型的JMX指标包括lag, max-lag等

    2019-11-27
    1
  • 诗泽
    老师可以简单对比一下pulsar 与kafka吗?感觉pulsar 的好多设计都是借鉴kafka的,最大的一个区别是将broker 与数据存储分离,使得broker 可以更加容易扩展。另外,consumer 数量的扩展也不受partition 数量的限制。pulsar 大有取代kafka之势,老师怎么看?

    作者回复: 哈哈,和Pulsar的郭总和翟总相识,不敢妄言。

    2019-08-15
    3
    1
  • Allan
    2.7 看了源码的 增加分区。但是没有看明白逻辑,对于kafka设计的原理不理解导致嘛?就是说为啥里面是这么分配。里面的集合的asList(1, 2),asList(2, 3), asList(3, 1) 表示的是什么意思?第一位是broker嘛?第二位是分区数量?看了半天没整明白? Increase the partition count for a topic to the given totalCount assigning the new partitions according to the given newAssignments. The length of the given newAssignments should equal totalCount - oldCount, since the assignment of existing partitions are not changed. Each inner list of newAssignments should have a length equal to the topic's replication factor. The first broker id in each inner list is the "preferred replica". For example, suppose a topic currently has a replication factor of 2, and has 3 partitions. The number of partitions can be increased to 6 using a NewPartition constructed like this: NewPartitions.increaseTo(6, asList(asList(1, 2), asList(2, 3), asList(3, 1))) In this example partition 3's preferred leader will be broker 1, partition 4's preferred leader will be broker 2 and partition 5's preferred leader will be broker 3. Params: totalCount – The total number of partitions after the operation succeeds. newAssignments – The replica assignments for the new partitions. public static NewPartitions increaseTo(int totalCount, List<List<Integer>> newAssignments) { return new NewPartitions(totalCount, newAssignments); }

    作者回复: 没懂您的问题具体是什么。

    2021-04-21
    2
  • 建华
    老师好,用adminclient中的creatacl实现授权好像没有效果,用kafka-acl.sh查不到记录,老师在java代码中怎么动态授权呀

    作者回复: 有具体代码吗?这些信息量无法进一步判断问题:(

    2021-01-05
收起评论
显示
设置
留言
25
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部