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核心技术与实战
登录|注册

29 | Kafka动态配置了解下?

胡夕 2019-08-08
你好,我是胡夕。今天我要和你讨论的主题是:Kafka 的动态 Broker 参数配置。

什么是动态 Broker 参数配置?

在开始今天的分享之前,我们先来复习一下设置 Kafka 参数,特别是 Broker 端参数的方法。
在 Kafka 安装目录的 config 路径下,有个 server.properties 文件。通常情况下,我们会指定这个文件的路径来启动 Broker。如果要设置 Broker 端的任何参数,我们必须在这个文件中显式地增加一行对应的配置,之后启动 Broker 进程,令参数生效。我们常见的做法是,一次性设置好所有参数之后,再启动 Broker。当后面需要变更任何参数时,我们必须重启 Broker。但生产环境中的服务器,怎么能随意重启呢?所以,目前修改 Broker 端参数是非常痛苦的过程。
基于这个痛点,社区于 1.1.0 版本中正式引入了动态 Broker 参数(Dynamic Broker Configs)。所谓动态,就是指修改参数值后,无需重启 Broker 就能立即生效,而之前在 server.properties 中配置的参数则称为静态参数(Static Configs)。显然,动态调整参数值而无需重启服务,是非常实用的功能。如果你想体验动态 Broker 参数的话,那就赶快升级到 1.1 版本吧。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • 注定非凡
    1 诞生背景:
    普通做法是,一次性在server.properties文件中配置好所有参数后,启动Broker。但是在需要变更任何参数后,就必须要重启Broker,这很不方便
    在1.1.0版本中正是引入了动态Broker参数(Dynamic Broker Configs)。
    2 概念:
    所谓动态,就是指修改参数值后,无需重启Broker就能立即生效,在server.properties中配置的参数称之为静态参数(Static Configs)。

    3 分类:
    read-only:被标记为read-only的参数和原来的参数行为一样,只有重启Broker,才能令修改生效。
    per-broker:被标记为per-broker的参数属于动态参数,修改它之后,只会在对应的Broker上生效。
    cluster-wide:被标记为cluster-wide的参数也属于动态参数,修改它之后,会在整个集群范围内生效。

    4 使用场景:
    A :动态调整Broker端各种线程池大小,实时应对突发流量
    B :动态调整Broker端连接信息或安全配置信息
    C :动态更新SSL Keystore有效期
    D :动态调整Broker端Compact操作性能
    E :实时变更JMX指示收集器(JMX Metrics Reporter)
    5 保存:
     
    A :首先Kafka将动态Broker参数保存在Zookeeper中
    (1)changes是用来实时监控动态参数变更的,不会保存参数值;
    (2)topic是用来保存Kafka主题级别参数的。
    (3)user和clients是用于动态调整客户端配额(Quota)的znode节点。所谓配额是指Kafka运维人员限制连入集群的客户端的吞吐量或是限定他们的使用CPU资源。

    B :/config/brokers znode才是真正保存动态Broker参数的地方。该znode下有两大类子节点。
    (1)第一类子节点只有一个,固定叫<default>,保存cluster-wide范围的动态参数
    (2)第二类以Broker.id为名,保存特定Broker的per-broker范围参数。

    C :参数的优先级别:per-broker参数 > cluster-wide参数 > static参数 > Kafka默认值。

    6 如何配置:
    A :使用Kafka自带的Kafka自带的Kafka-configs脚本。
    如果要设置cluster-wide范围的动态参数,需要显式指定entity-default。

    B :较大几率被动态调整的参值
    (1):log.retention.ms:修改日志留存时间
    (2):num.io.threads 和 num.network.threads
    (3):与SS相关的参数
    ssl.keystore.type,ssl.keystore.location,ssl.kestore.password和ssl.key.password。允许动态实时调整他们,就能创建过期时间很短的SSL证书,使用新的Keystore,阶段性的调整这组参数,提升安全性。
    (4):num.replica.fetchers:这个可以增加该参数值,确保有充足的线程可以执行Follower副本向Leader副本的拉取。

    2019-11-11
    1
  • 外星人
    你好,我们用的版本是1.1,请问下,动态参数有没有bug啊?

    作者回复: 目前没有太严重的bug

    2019-08-08
    1
  • 玉剑冰锋
    这么看的话,是不是不管是动态参数还是静态参数,集群中的broker配置是可以不一样的对吧?我用0.11(测试环境),环境中三台kafka磁盘容量不一样,导致的问题就是另外两台磁盘已经到了警戒值,剩下那一台磁盘始终用不上,如果可以的话我直接调整一台的保留时间就好了

    作者回复: 每个Broker可以是不同的配置。

    2019-08-08
    1
    1
  • James
    看到后面,感觉像运维了。。
    2019-11-18
  • Mick
    老师,请问下在文件系统中是不是看不到 znode路径结构的?我找了半天没找到图上的目录结构。我要怎么才能看到?

    作者回复: 你要访问ZooKeeper才能看到ZooKeep下的路径结构。如果你使用的是Kafka自带的zookeeper,可以运行bin/zookeeper-shell.sh zkhost:zkport

    2019-09-20
    1
  • Mick
    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0x1 zxid:0x726 txntype:-1 reqpath:n/a Error Path:/consumers Error:KeeperErrorCode = NodeExists for /consumers (org.apache.zookeeper.server.PrepRequestProcessor)
    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0x2 zxid:0x727 txntype:-1 reqpath:n/a Error Path:/brokers/ids Error:KeeperErrorCode = NodeExists for /brokers/ids (org.apache.zookeeper.server.PrepRequestProcessor)

    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0x3 zxid:0x728 txntype:-1 reqpath:n/a Error Path:/brokers/topics Error:KeeperErrorCode = NodeExists for /brokers/topics (org.apache.zookeeper.server.PrepRequestProcessor)

    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0x4 zxid:0x729 txntype:-1 reqpath:n/a Error Path:/config/changes Error:KeeperErrorCode = NodeExists for /config/changes (org.apache.zookeeper.server.PrepRequestProcessor)

    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0xb zxid:0x730 txntype:-1 reqpath:n/a Error Path:/config/clients Error:KeeperErrorCode = NodeExists for /config/clients (org.apache.zookeeper.server.PrepRequestProcessor)

    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0xc zxid:0x731 txntype:-1 reqpath:n/a Error Path:/config/users Error:KeeperErrorCode = NodeExists for /config/users (org.apache.zookeeper.server.PrepRequestProcessor)

    INFO Got user-level KeeperException when processing sessionid:0x100000400f10000 type:create cxid:0xd zxid:0x732 txntype:-1 reqpath:n/a Error Path:/config/brokers Error:KeeperErrorCode = NodeExists for /config/brokers (org.apache.zookeeper.server.PrepRequestProcessor)
    老师,请问下启动zk 然后启动kafka后 zk报错 这是什么导致的?

    作者回复: 这些是INFO级别的日志,Zk上某些节点不存在,不一定就是问题,有其他的ERROR日志吗?

    2019-09-19
  • 外星人
    您好,我们生产上num.io.threads已经提高到了24,但是对应idle还是在0.3左右,是不是kafkaapi哪个接口处理慢了?这种情况一般如何定位啊?谢谢

    作者回复: 大概率是PRODUCE和FETCH请求。不过你最好结合kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request={Produce|FetchConsumer|FetchFollower}确认下是否需要调整num.network.threads

    2019-08-22
    1
  • 无菇朋友
    老师 请问下 怎么查看每个broker的请求积压情况?

    作者回复: 可以看看broker端的请求队列的JMX指标

    2019-08-20
  • godtrue
    请问老师,kafka动态调整配置的实现原理是啥?它怎么做到不需重启broker就能使配置生效的?

    作者回复: 把配置保存在ZooKeeper中,然后动态监听这个变更,一旦监听到立即处理

    2019-08-18
  • Sunney
    老师你好,我想咨询一下NATS和Kafka的区别和各自的适用场景是什么?
    2019-08-09
  • cricket1981
    follower为什么会拉取副本慢?它不负责读写只专心同步副本数据,增加线程就有用吗?会增加leader负担吗?

    作者回复: 因为是异步的网络请求。一个Broker上可能有很多follower副本,增加线程可以均匀分散这些follower副本来去任务

    2019-08-09
  • cricket1981
    怎样知道什么时候该调整这两组线程池大小?

    作者回复: 可以监控请求队列的大小

    2019-08-09
  • 边城
    您好,动态参数会一直生效吗?是不是需要在 server.properties 里同步维护,防止下次重启时参数失效。

    作者回复: 不会失效,即使重启

    2019-08-08
    2
  • 玉剑冰锋
    如果可以每台设置不同的日志保存时间,这样的话会导致分区留存时间不一致,消费者消费的问题怎么办?

    作者回复: 统一的机制。反正消费不到数据的话就发生位移越界的情况

    2019-08-08
收起评论
14
返回
顶部