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

28 | 主题管理知多少?

胡夕 2019-08-06
你好,我是胡夕。今天我想和你讨论一下 Kafka 中的主题管理,包括日常的主题管理、特殊主题的管理与运维以及常见的主题错误处理。

主题日常管理

所谓的日常管理,无非就是主题的增删改查。你可能会觉得,这有什么好讨论的,官网上不都有命令吗?这部分内容的确比较简单,但它是我们讨论后面内容的基础。而且,在讨论的过程中,我还会向你分享一些小技巧。另外,我们今天讨论的管理手段都是借助于 Kafka 自带的命令。事实上,在专栏后面,我们还会专门讨论如何使用 Java API 的方式来运维 Kafka 集群。
我们先来学习一下如何使用命令创建 Kafka 主题。Kafka 提供了自带的 kafka-topics 脚本,用于帮助用户创建主题。该脚本文件位于 Kafka 安装目录的 bin 子目录下。如果你是在 Windows 上使用 Kafka,那么该脚本位于 bin 路径的 windows 子目录下。一个典型的创建命令如下:
bin/kafka-topics.sh --bootstrap-server broker_host:port --create --topic my_topic_name --partitions 1 --replication-factor 1
create 表明我们要创建主题,而 partitions 和 replication factor 分别设置了主题的分区数以及每个分区下的副本数。如果你之前使用过这个命令,你可能会感到奇怪:难道不是指定 --zookeeper 参数吗?为什么现在变成 --bootstrap-server 了呢?我来给出答案:从 Kafka 2.2 版本开始,社区推荐用 --bootstrap-server 参数替换 --zookeeper 参数,并且显式地将后者标记为“已过期”,因此,如果你已经在使用 2.2 版本了,那么创建主题请指定 --bootstrap-server 参数。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

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

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

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

    作者回复: 不会的。

    2019-08-06
    3
  • 注定非凡
    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前缀线程状态。

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

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

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

    作者回复: 不需要的

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

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

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

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

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

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

    2019-08-14
  • ban
    老师两个问题想问下,

    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. 没太明白第二个问题的意思。。。

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

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

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

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

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

    2019-08-06
收起评论
15
返回
顶部