• 注定非凡
    2019-11-11
    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副本的拉取。
        
    展开
    
     3
  • 外星人
    2019-08-08
    你好,我们用的版本是1.1,请问下,动态参数有没有bug啊?

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

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

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

     1
     1
  • 星亦辰
    2020-01-19
    请教下老师, confluent_kafka 的类库怎么样获取 consumer 指定group 的offset 值? 或者有没有其他的办法监控到一个数据队列对于一个group 而言,堆积了多少未处理的数据?

    作者回复: 可以使用AdminClient.listConsumerGroupOffsets方法获取之

    
    
  • 第一片心意
    2019-12-16
    动态更改之后的参数,如果某个broker重启的话,那些动态修改过的参数会失效吧,毕竟broker启动时,会读取 config/server.propertyes 文件的内容。

    作者回复: 不会失效。动态参数配置在ZooKeeper中

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

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

     1
    
  • Mick
    2019-09-19
    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-08-22
    您好,我们生产上num.io.threads已经提高到了24,但是对应idle还是在0.3左右,是不是kafkaapi哪个接口处理慢了?这种情况一般如何定位啊?谢谢

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

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

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

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

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

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

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

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

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

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

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

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

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

    
    
我们在线,来聊聊吧