kafka如何扩容分区Partition、并重新分区

1.扩容
在新的物理机上安装kafka程序,修改config/server.properties文件里的broker.id必须在集群中唯一,修改其他必要的配置项,其中zookeeper.connect配置项,写上kafka集群现在使用的zookeeper集群的地址。
然后启动kafka就可以加入到集群中了。
但是新加入的机器只能对新产生的topic起作用,对已有的topic在没有做处理前,是不会承担任何任务的,所以不会分担集群的压力。

2.重新分区Partition
假设有一个名为test的topic,只有1个partition,现在由于存储空间不足,需要重新分区。

3.修改topic的partitions

./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --alter --topic test --partitions 6

现在topic有6个partition,但是数据还没有迁移过去

4.迁移数据
使用kafka提供的工具kafka-reassign-partitions.sh来迁移数据。迁移数据需要分三步做

第一步:生成迁移计划
先手动生成一个topic.json,内容如下。这里topic可以是一个列表,

{
"topics": [
{"topic": "test"}
],
"version": 1
}

执行如下语句,

./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --topics-to-move-json-file topic.json --broker-list "0,1,2,3,4" --generate

将topic.json里的topic迁移到broker-list列表里列的broker上,会得到一个执行计划

Current partition replica assignment
{"version":1,
"partitions":[....]
}
Proposed partition reassignment configuration
{"version":1,
"partitions":[.....]
}

新建一个文件reassignment.json,保存上边这些信息。其中Current partition replica assignment指当前的分区情况,Proposed partition reassignment configuration是计划的分区情况

第二步:迁移
执行如下命令

./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --reassignment-json-file reassignment.json --execute

第三步:验证

./bin/kafka-reassign-partitions.sh --zookeeper 10.0.210.152:2181 --reassignment-json-file reassignment.json --verify

第四步:随机查看topics是否迁移

./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --describe --topic test

5.其他kafka常用命令

./bin/kafka-console-producer.sh --broker-list 10.0.210.152:9092 --topic test
./bin/kafka-console-consumer.sh --zookeeper 10.0.210.152:2181 --topic test --from-beginning
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --list
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --create --replication-factor 2 --partition 6 --topic test
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --delete --topic test
./bin/kafka-topics.sh --zookeeper 10.0.210.152:2181 --describe --topic test

原文链接:https://blog.csdn.net/gezilan/article/details/80412490

Kafka是一款分布式的流处理平台,可以用来处理大规模的实时数据流。在Kafka中,消息以主题(topic)的形式进行存储和组织,而主题又被划分为多个分区partition)。 消费者(consumer)可以从指定的分区中读取消息。消费者可以通过指定分区编号或者分区副本所在的主机地址来消费特定分区的消息。 当我们需要消费指定分区时,可以按照以下步骤进行操作: 首先,创建一个Kafka消费者对象,在创建消费者时,需要指定消费者组ID和消费者配置参数。 然后,指定要消费的分区Kafka提供了两种方式进行分区的指定: 1. 通过指定分区编号:可以通过`assign()`方法将指定的分区编号传递给消费者。例如,`consumer.assign(Collections.singleton(new TopicPartition("topicName", 1)));`表示将消费者指定为消费主题名为"topicName"下分区编号为1的分区的消息。 2. 通过指定主机地址:可以通过`assign()`方法将指定的主机地址传递给消费者。例如,`consumer.assign(Collections.singleton(new TopicPartition("topicName", new Node(1, "hostName", 9092))));`表示将消费者指定为消费主题名为"topicName"下分区副本所在的主机为"hostName",端口号为9092的分区的消息。 最后,通过调用`poll()`方法来获取指定分区的消息。消费者会从指定分区的最新消息位置开始读取消息,并持续地从该分区获取新的消息。 需要注意的是,在消费者中指定分区后,消费者只会读取该分区的消息,并忽略其他分区的消息。如果需要消费多个分区的消息,可以重复调用`assign()`方法来指定多个分区。 以上就是使用Kafka消费指定分区的简要介绍,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值