kafka-replication

文章分享

好文

这里讲述了 partition 对于并发的重要性,其中介绍了 kafka 实现中,kafka 处理每一个 partition 都是对应一个线程的,所以多 partition 之间是写入是可以并发的。读取的时候,多个 consumer 消耗对应的 partition 是可以增加吞吐量的。

好文
这里讲述了 kafka 对硬件的选择。

扩容

add broker

kafka 加入一个 broker 只需要配置文件对了,直接起来就好了,没啥好说的。

add partitions

增加 partition 的话,通过kafka-topics.sh这个脚本即可。

./kafka-topics.sh --alter --zookeeper 127.0.0.1:2181/kafka --partitions 10 --topic topic_test

调整 partitions

调整的话,是通过kafka-reassign-partitions.sh这个脚本提交任务的。具体教程网上蛮多的,还是多写一些吧。

指定需要调整的 topics
{
      "topics": [
        {"topic":"topic_test"},
      ],
      "version": 1
}
save to test.json
生成调整后的 json
./kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181/kafka --topics-to-move-json-file ./test.json --broker-list "0,1,2,3,4" --generate

这里的 broker-list 是 kafka 配置文件里面 broker-id 的集合。
命令之后,会生成两个 json,一个是目前 partition 的分布,第二个是调整后的 partiton 分布,这里保存为 move.json。这里 kafka 是按照自己的算法生成的,实际上,并不是最优。所以最好对照目前 partition 的分布,自己再做调整。
原则有两个,1. Skewed, partition 分布要均匀;2. Leader Skewed, leader 分布要均匀。

提交调整的 json

./kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181/kafka --reassignment-json-file  move.json --execute

提交的任务是异步执行的,这个过程中网络磁盘IO都会很大,负载也会升高,所以需要注意。

检查

./kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181/kafka --reassignment-json-file  move.json --verify

指定 leader

指定 leader 的话,通过kafka-preferred-replica-election.sh这个脚本提交的。默认是选择了 Replicas 中,还出于 sycn 状态的broker的第一个。所以上面提交调整的 json,需要把这一条考虑进去,注意 broker 的顺序。

./kafka-preferred-replica-election.sh --zookeeper 127.0.0.1:2181/kafka