• Fever
    2019-08-06
    因为多个broker节点都冗余有分区的数据,减少分区数需要操作多个broker且需要迁移该分区数据到其他分区。如果是按消息key hash选的分区,那么迁移就不知道迁到哪里了,因为只有业务代码可以决定放在哪。不知道我想的对不对。

    作者回复: 我觉得很有道理:)

     1
     8
  • lmtoo
    2019-08-06
    如果增加分区,那旧分区的数据会自动转移吗?

    作者回复: 不会的。

    
     3
  • 注定非凡
    2019-11-11
    1,创建Kafka主题:
    Kafka提供了自带的Kafka-topic脚本用于帮助用户创建主题。
    bin/kafka-topic.sh --bootstarp-server broker_host:port --create –topic my_topic --partitions 1 --replication-factor 1
    create 表明我们要创建主题,而partitions和replication factor分布设置了主题的分区数以及每个分区下的副本数。

    2,查询主题
    查询所有主题的列表:/bin/kafka-topic.sh --bootstrap-server broker_host:port --list
    查询单个主题的详细数据:/bin/kafka-topic.sh --bootstrap-server broker_host:port --describe --topic <topic name>

    3,修改主题
    A :修改分区:/bin/kafka-topic.sh --bootstrap-server broker_host : port --alter --topic <topic_name> --partitions <新分区数>
    分区数一定要比原有分区数大。

    B :修改主题级别参数:使用kafka-configs脚本修改对应的参数。
    修改主题级别的max.message.bytes :/bin/kafka-configs.sh --zookeeper zookeeper_host:port --entity-type topic --entity-name <topic_name> --alter --add-config max.message.bytes=10485760

    这个命令里使用的 –zookeeper,也可以使用 --bootstrap-server,只是他是用来设置动态参数的。

    C :变更副本数
    使用kafka-reassign-partitions 脚本,增加副本数

    D :修改主题限速
    这是指设置Leader副本和follower 副本使用的带宽。有时候,需要让某个主题的副本在执行副本同步机制时,不要消耗过多的带宽。
    要做到这个需要先设置leader.replication.throttled.rate和follower.replication.throttled.rate

    bin/kafka-configs.sh --zookeeper zookeeper_host:port --alter --add-config 'leader.replication.throttled.rate=104857600,follower.replication.throttled.rate=104857600' --entity-type brokers --entity-name 0

    E :主题分区迁移
    同样是使用kafka-ressign-partitions脚本。

    F :删除主题
    /bin/kafka-topic.sh –bootstrap-server broker_host:port --delete --topic <topic_name>
    删除主题的操作是异步的,执行完这条命令不代表主题立即就被删除了,它仅仅是被标记成“已删除”状态而已。Kafka会在后台默默地开启主题删除操作。

    4 常见主题错误处理

    1:主题删除失败
    造成主题删除失败的原因有很多,最常见的原因有两个:副本所在Broker宕机了;待删除主题的部分分区依然在执行迁移过程。

    解决:
    第一步:手动删除Zookeeper节点/admin/delete_topics 下待删除主题为名的znode。
    第二步:手动删除该主题的磁盘上的分区目录。
    第三步:在Zookeeper中执行rmr/controller,触发Controller重选举,刷新Controller缓存。
    在执行最后一步时,要慎重,因为他可能造成大面积的分区Leader重选举。事实上,仅仅执行前两步也是可以的,只是Controller缓存中没有清空删除主题,不影响使用。

    2:_consumer_offset占用太多的磁盘

    如果发现这个主题占用了过多的磁盘空间,就要显示的使用jstack 命令查看kafka-log-cleaner-thread前缀线程状态。

    展开
    
     1
  • godtrue
    2019-08-18
    减少分区数会带来至少两个明显的问题
    1:被删除的分区中的数据怎么处理?
    如Fever同学所讲,存在那种只有业务代码才知道将被减少的分区中的数据迁移到哪里的情况,出现这种情况就会丢失数据啦!
    2:分区数的变动会触发消费者组重平衡?
    重平衡也存在一定的风险,应该尽量避免
    此节可作为主题管理操作的索引
    展开
    
     1
  • 皇家救星
    2019-08-06
    老师,您好。请问您能不能介绍kafka怎么优雅停止集群中的一台broker。因为根据您的文章我了解到一个broker可能是整个集群的控制中心,也可能是某几个分区的leader,如果直接kill进程,需要集群重新选举后才恢复正常,感觉比较粗暴(会不会有选举失败的风险)。如果我有一台broker想短暂下线重启,怎么做比较好。

    作者回复: 可以先确定这个broker的角色,如果身兼数职,可以考虑先给它卸下一些重担?

    
     1
  • 陈国林
    2020-02-01
    1. 减少分区数意味着 必然要进行数据的迁移
    2. 同时要进行leader 重新选举
    3. 这就意味着会有服务不可用
    4. 会影响consumer实例的消费,需要重新rebalance
    
    
  • pain
    2019-12-15
    老师,关于限速有两个问题:
    第一,设置 topic 限速的适合,是针对主题副本所在的 broker 设置参数,那么这样会影响到其他的主题吗?
    第二,现在 kafka 限速是没有租户隔离的,如果要针对一个主题内的租户进行限速,有什么好的方案吗

    作者回复: 1. 针对单个topic的不会影响其他主题
    2. Kafka支持userID和clientID级别的限速设置

    
    
  • man1s
    2019-12-03
    不允许减少分区的原因应该是没法维护group的offset
    
    
  • 西红柿牛男
    2019-10-28
    老师问下如果kafka新增集群节点,需要rebalance吗?

    作者回复: 不需要的

    
    
  • 电光火石
    2019-09-14
    不能减少分区是否是因为存量数据不好迁移导致的?
    
    
  • Mick
    2019-08-29
    老师,我的kafka 版本是kafka_2.12-2.3.0 但我运行这
    bin/kafka-topics.sh --bootstrap-server xxx.xxx.xxx.xxx:9092 --list
    什么也不输出请问下是怎么回事?也不报错。

    作者回复: 确认有topic被创建出来了吗

     1
    
  • 小可爱
    2019-08-29
    增加分区如果是按消息key hash选的分区,这个时候分区消息要重新迁移吗

    作者回复: 取决于你是否想要迁移,因此默认是不会自动迁移的

     1
    
  • Nic-愛
    2019-08-14
    老师有个问题,上面说到现在用命令基本都是指定bootsrap server ,那么对于创建topic 查询topic (list)这种操作还是得指定zkClient

    作者回复: 对于比较新的Kafka,可以指定--bootstrap-server

    
    
  • ban
    2019-08-11
    老师两个问题想问下,

    1、根据__consumer_offsets主题查看消费组提交的位移数据:
    bin/kafka-console-consumer.sh --bootstrap-server kafka_host:port --topic __consumer_offsets --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" --from-beginning
    但是执行后一点数据都没有,这个命令什么情况下执行才会有数据出来的。

    2、读取主题消息和消费组状态的命令,可以消费其他topic吗,我试了下,只有__consumer_offsets能读取出消息
    命令:bin/kafka-console-consumer.sh --bootstrap-server kafka_host:port --topic __consumer_offsets --formatter "kafka.coordinator.group.GroupMetadataManager\$GroupMetadataMessageFormatter" --from-beginning
    展开

    作者回复: 1. 是否提交位移了?可以用console consumer模拟消费一下,然后再执行这个命令看看
    2. 没太明白第二个问题的意思。。。

    
    
  • ban
    2019-08-11
    老师,《主题消耗了过多的磁盘空间,那么,你一定要显式地用jstack 命令查看一下 kafka-log-cleaner-thread 前缀的线程状态。》

    查看cleaner-thread 线程,是不是先执行jps查出kafak的pid,再执行jps kafkapid,检查是否cleaner-thread 前缀的线程,有就说明启动着,但是我查了几遍都没有发现这个线程信息。是不是操作方式不对
    
    
  • 信信
    2019-08-08
    修改主题分区的broker_host是随便指定一个吗?最后由zk通知到控制器?

    作者回复: 其实如果指定的是broker host,后面是不走ZooKeeper的

    
    
  • 玉剑冰锋
    2019-08-06
    想请教一下老师,kafka集群中(3台)对topic数量和partitions数量有限制吗?或者有参考值吗?

    作者回复: 没有硬性要求,不过新一点的Kafka集群上最好不要超过2000个topic

    
    
我们在线,来聊聊吧