Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

32 | KafkaAdminClient:Kafka的运维利器

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

引入原因

在上一讲中,我向你介绍了 Kafka 自带的各种命令行脚本,这些脚本使用起来虽然方便,却有一些弊端。
首先,不论是 Windows 平台,还是 Linux 平台,命令行的脚本都只能运行在控制台上。如果你想要在应用程序、运维框架或是监控平台中集成它们,会非常得困难。
其次,这些命令行脚本很多都是通过连接 ZooKeeper 来提供服务的。目前,社区已经越来越不推荐任何工具直连 ZooKeeper 了,因为这会带来一些潜在的问题,比如这可能会绕过 Kafka 的安全设置。在专栏前面,我说过 kafka-topics 脚本连接 ZooKeeper 时,不会考虑 Kafka 设置的用户认证机制。也就是说,任何使用该脚本的用户,不论是否具有创建主题的权限,都能成功“跳过”权限检查,强行创建主题。这显然和 Kafka 运维人员配置权限的初衷背道而驰。
最后,运行这些脚本需要使用 Kafka 内部的类实现,也就是 Kafka服务器端的代码。实际上,社区还是希望用户只使用 Kafka客户端代码,通过现有的请求机制来运维管理集群。这样的话,所有运维操作都能纳入到统一的处理机制下,方便后面的功能演进。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

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

    作者回复: kafka manager

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

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

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

    作者回复: 嗯嗯,是的

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

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

    2019-11-27
  • 注定非凡
    1 引入原因:
    A :kafka自带的各种命令行脚本都只能运行在控制台上,不便于集成进应用程序或运维框架
    B :这些命令行脚本很多都是通过连接Zookeeper来提供服务,这存在一些潜在问题,如这可能绕开Kafka的安全设置。
    C :这些脚本需要使用Kafka内部的类实现,即Kafka服务端的代码。社区希望用户只使用Kafka客户端代码,通过现有的请求机制来运维管理集群。

    2 如何使用:
    A :要想使用,需要在工程中显示的地增加依赖。

    3 功能:
    A :有九大类功能:
    (1)主题管理:包括主题的创建,查询和删除
    (2)权限管理:包括具体权限的配置与删除
    (3)配置参数管理:包括Kafka各种资源的参数设置,详情查询。所谓的kafka资源主要有Broker,主题,用户,Client-id等
    (4)副本日志管理:包括副本底层日志路径的变更和详情查询
    (5)分区管理:即创建额外的主题分区
    (6)消息删除:删除指定位移之前的分区消息
    (7)Delegation Token管理:包括Delegation Token的创建,更新,过期和详情查询
    (8)消费者组管理:包括消费者组的查询,位移查询和删除
    (9)Preferred领导者选举:推选指定主题分区的Preferred Broker为领导者。
    4 工作原理
    A :从设计上来看,AdminClient是一个双线程的设计:前端主线程和后端I/O线程。
    (1)前端线程负责将用户要执行的操作转换成对应的请求,然后将请求发送到后端I/O线程的队列中;
    (2)后端I/O线程从队列中读取相应的请求,然后发送到对应的Broker节点上,之后把执行结果保存起来,以便等待前端线程的获取。
    B :AdminClient在内部大量使用生产者—消费者模型将请求生产和处理解耦
    C :前端主线程会创建一个名为Call的请求对象实例。该实例的有两个主要任务
    (1)构建对应的请求对象:如要创建主题,就创建CreateTopicRequest;要查询消费者位移,就创建OffsetFetchRequest
    (2)指定响应的回调逻辑:如Broker端接收到CreateTopicResponse之后要执行的动作。
    (*)一旦创建好Call实例,前端主线程会将其放入到新请求队列(New Call Queue)中,此时,前端主线程的任务就算完成了。他只需要等待结果返回即可。剩下的所有事情都是后端I/O线程的工作了。

    D :后端I/O线程,该线程使用了3个队列来承载不同时期的请求对象,他们分别是新请求队列,待发送请求队列和处理中请求队列。
    (1)使用3个队列的原因:新请求队列的线程安全是有Java的monitor锁来保证的。为了确保前端主线程不会因为monitor锁被阻塞,后端I/O线程会定期地将新请求队列中的所有Call实例全部搬移到待发送请求队列中进行处理。
    (2)待发送请求队列和处理中请求队列只由后端I/O线程处理,因此无需任何锁机制来保证线程安全。
    (3)当I/O线程在处理某个请求时,他会显式的将该请求保存在处理中请求队列。一旦处理完成,I/O线程会自动地调用Call 对象中的回调完成最后的处理。
    (4)最后,I/O线程会通知前端主线程处理完毕,这样前端主线程就能够及时的获取到执行操作的结果。

    5 构造和销毁AdminClient实例
    A :切记它的的完整路径是org.apche.kafka.clients.admin.AdminClient。
    B :创建AdminClient实例和创建KafkaProducer或KafkaConsumer实例的方法是类似的,你需要手动构造一个Properties对象或Map对象,然后传给对应的方法。

    2019-11-12
  • subfire
    👍
    2019-10-23
  • maslke
    手里的开发环境是这样:一台widnows 10的机器,在linux子系统中安装了kafka,在windows中进行AdminClient调用,刚开始连接不上kakfa。后来通过在windows下,调用bat脚本才发现是PCNAME.localdomain这个hostname识别不了。后来通过在hosts进行了一下配置才ok。

    作者回复: 嗯嗯,最好别在Windows上测试Kafka:)

    2019-09-07
  • maslke
    Map<String, NewPartitions> newPartitionsMap = new HashMap<>();
            newPartitionsMap.put(topicName, NewPartitions.increaseTo(partitions));
            CreatePartitionsResult createPartitionsResult = client.createPartitions(newPartitionsMap);
            KafkaFuture<Void> future1 = createPartitionsResult.values().get(topicName);
            future1.get();
            System.out.println("ok");
    2019-09-07
  • Geek_b809ff
    老师,请教一下:可视化Kafka管理工具,是Kafka Manager更好还是Kafka Eagle更好,为什么?

    作者回复: 前者用的比较多,后者坦率说没怎么用过,不好做推荐:)

    2019-08-27
    1
  • 空知
    老师问下 AdminClient通过Java Object的 wait notify 实现通知机制,这里是 前端主线程进行条件队列吗?是的话 主线程会阻塞吧

    作者回复: 现在改成monitor锁的方式了。会阻塞,不过通常阻塞时间很短

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

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

    2019-08-26
    1
  • godtrue
    打卡,此节介绍了kafka的运维利器——AdminClient
    1:AdminClient 的工作原理?
    从设计上来看,AdminClient 是一个双线程的设计:前端主线程和后端 I/O 线程。前端线程负责将用户要执行的操作转换成对应的请求,然后再将请求发送到后端 I/O 线程的队列中;而后端 I/O 线程从队列中读取相应的请求,然后发送到对应的 Broker 节点上,之后把执行结果保存起来,以便等待前端线程的获取。
    2:AdminClient的特点?
    社区于 0.11 版本正式推出了 Java 客户端版的 AdminClient 工具,该工具提供了几十种运维操作,而且它还在不断地演进着——功能强悍,不断完善中。
    2019-08-19
  • Nic-愛
    老师,有个问题,如果broker的端口号改变了,消费之前的 topic需要改动哪些参数

    作者回复: 要修改consume端的连接配置即可

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

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

    2019-08-15
    1
  • cricket1981
    添加JMX指标以获取 Broker 磁盘占用这块感觉可以提个KIP
    2019-08-15
收起评论
15
返回
顶部