美文网首页
Kafka中的主题与分区

Kafka中的主题与分区

作者: 就这些吗 | 来源:发表于2020-03-29 05:35 被阅读0次

阅读以下内容你将了解到:
1.主题和分区和日志的关系?
2.为什么不支持减少分区?
3.分区中优先副本的选举策略
4.如何选择合适的分区数?

1.主题和分区和日志的关系?

主题(Topic)作为消息的归类,可以再细分为一个或多个分区(partition),分区可以理解为消息的二次归类。
分区可以有一至多个副本,每个副本对应一个日志文件,每个日志文件对应一至多个日志分段。
同一个分区中的多个副本必须分布在不同的broker,这样才能提供有效的数据冗余。(不然你一个broker宕了,其他的副本也跟着宕了就没意义了嘛。)

2.为什么不支持减少分区?

减少分区需要保证消息的可靠性、删除分区里的消息需要分配到其他分区,复制期间的可用性难以保证,其他的比如顺序性、事务性等问题都需要考虑。收益极低。
而我们完全可以重新创建一个分区数较小的主题,然后将现有主题中的消息按照既定的逻辑复制过去即可。

3.分区中优先副本的选举策略

首先要保证leader的均衡分布,这样才能保证集群的负载均衡。
在Kafka中提供分区自动平衡功能,但是可能会引起客户端一定时间的阻塞,在关键时期(比如电商促销)这是不能接受的,所以我们还可以关闭自动功能,手动通过kafka-perferred-replica-election.sh脚本配合path-to-json-file参数来对主题topic-partition执行优先副本的选举操作

4.如何选择合适的分区数?

在创建主题时,最好就能够确定分区数,这样可以省去后期增加分区所带来的多余操作。
1.分区数的多少会影响系统的可用性,分区在进行leader切换的时候会变得不可用,这是需要考量的点。
2.分区数越多会让kafka的正常关闭和启动耗时边长
3.一个消费组的消费并行度依赖于所消费的分区数(无视其他所有条件,理论上分区数越多吞吐量应当越高,但是现实是我们需要考量磁盘、文件系统、I/O调度策略,分区越多吞吐量越高,但是是存在一个临界值的,超过这个临界值可能会导致吞吐量降低。)
4.建议分区数设定为broker的倍数。(当然如果集群中broker节点很多,有大几十、上百上千这条也不适用)
我们应当综合考量之后决定分区数的大小,这是极为考验经验的点。

相关文章

网友评论

      本文标题:Kafka中的主题与分区

      本文链接:https://www.haomeiwen.com/subject/rffyuhtx.html