如何在Kafka上对一个Topic增加partition

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Kafka上对一个Topic增加partition相关的知识,希望对你有一定的参考价值。

参考技术A 情况是这样的,在我们系统中有多个Consumer的客户端(客户端个数是不确定的,因为在系统工作过程中有的业务节点会脱离,有些业务节点会增加进来),Producer也有多个。但是Producer发送的消息种类只有一种,所以topic只创建了一个, 消息量很大,所以使用了多个Consumer来处理。现在想实现如下的订阅/推送效果,多个Producer进行消息的推送,例如消息X1、X2、X3、X4、X5.。。。。。。然后由多个Consumer分别进行拉去,Consumer1拉取到:X1、X4、X7。。。Consumer2拉取到:X2、X5、X8.。。。。。。。。如此类推 参考技术B 通过kafka-topics工具的alter命令,将TEST-TOPIC的partitions从2增加到4;
/bin/windows/kafka-topics.bat –zookeeper 127.0.0.1:2181 –alter –partitions 4–topic TEST-TOPIC

Kafka Topic Partition GroupId 及高可用

Topic主题用来区分不同类型的消息,实际也就是适用于不同的业务场景,默认消息保存一周时间;

同一个Topic主题下,默认是一个partition分区,也就是只能有一个消费者来消费,如果想提升消费能力,就需要增加分区;

同一个Topic的多个分区,可以有三种方式分派消息(key,value)到不同的分区,指定分区、HASH路由、默认,同一个分区内的消息ID唯一,并顺序;

消费者消费partition分区内的消息时,是通过offsert来标识消息的位置;

GroupId用来解决同一个Topic主题下重复消费问题,比如一条消费需要多个消费者接收到,就可以通过设置不同的GroupId实现,

实际消息是存一份的,只是通过逻辑上设置标识来区分,系统会记录Topic主题下--》GroupId分组下--》partition分区下的offsert,来标识是否消费过。

发送消息的高可用---

集群模式,多副本方式实现;一条消息的提交,可能通过设置acks标识实现不同的可用性,=0时,发送成功就OK;=1时,master成功响应才OK,=all时,一半以上的响应才OK(真正的高可用)

消费消息的高可用---

可以关闭自动标识offsert模式,先拉取消息,消费完成后,再去设置offsert位置,来解决消费高可用

 

以上是关于如何在Kafka上对一个Topic增加partition的主要内容,如果未能解决你的问题,请参考以下文章

如何查看kafka 各partition数据量

Kafka分区分配策略

kafka 常见命令以及增加topic的分区数

Linux安装Kafka

kafka常用命令

linux 怎样查看kafka的某 topic数据