Apache kafka 当重新分配分区(特别是日志大小)时,Kafka会发生什么?
因此,我们目前正在尝试使用卡夫卡0.9,并且几乎处于概念验证阶段。我们只是刚刚开始调查,并试图找出,如果这是我们需要的。还有相当多的学习要做,所以请容忍我:) 当前设置如下所示:Apache kafka 当重新分配分区(特别是日志大小)时,Kafka会发生什么?,apache-kafka,Apache Kafka,因此,我们目前正在尝试使用卡夫卡0.9,并且几乎处于概念验证阶段。我们只是刚刚开始调查,并试图找出,如果这是我们需要的。还有相当多的学习要做,所以请容忍我:) 当前设置如下所示: 3个不同主机上的卡夫卡代理:zkhost1、zkhost2、zkhost3 一个主题:“我的主题” 该主题有4个分区 复制因子为1 我们有一个生产商和三个消费者,都属于同一个消费群体“myGroup” 现在我正试图用kafka-reassign-partitions.sh脚本更改复制因子。为此,我创建了以下JSON
- 3个不同主机上的卡夫卡代理:zkhost1、zkhost2、zkhost3
- 一个主题:“我的主题”
- 该主题有4个分区
- 复制因子为1
- 我们有一个生产商和三个消费者,都属于同一个消费群体“myGroup”
{"version":1,
"partitions":[
{"topic":"myTopic","partition":0,"replicas":[0,1,2]},
{"topic":"myTopic","partition":1,"replicas":[0,1,2]},
{"topic":"myTopic","partition":2,"replicas":[0,1,2]},
{"topic":"myTopic","partition":3,"replicas":[0,1,2]}
]
}
…然后执行脚本:
kafka/bin/kafka-reassign-partitions.sh --zookeeper zkhost1:2181,zkhost2:2181,zkhost3:2181 --reassignment-json-file increase-replication-factor.json --execute
这一切顺利进行,之后我得到了预期的复制:
Topic:myTopic PartitionCount:4 ReplicationFactor:3 Configs:
Topic: myTopic Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,2,1
Topic: myTopic Partition: 1 Leader: 0 Replicas: 0,1,2 Isr: 0,2,1
Topic: myTopic Partition: 2 Leader: 0 Replicas: 0,1,2 Isr: 0,2,1
Topic: myTopic Partition: 3 Leader: 0 Replicas: 0,1,2 Isr: 0,2,1
我不明白的是,在重新分配期间分区发生了什么。当我查看ConsumerofSetchecker时,这是我在重新分配之前看到的:
kafka/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group myGroup --zookeeper zkhost1:2181 --topic myTopic
Group Topic Pid Offset logSize Lag Owner
myGroup myTopic 0 925230 925230 0 none
myGroup myTopic 1 925230 925230 0 none
myGroup myTopic 2 925230 925230 0 none
myGroup myTopic 3 925230 925230 0 none
Group Topic Pid Offset logSize Lag Owner
myGroup myTopic 0 23251 23252 1 none
myGroup myTopic 1 41281 41281 0 none
myGroup myTopic 2 23260 23260 0 none
myGroup myTopic 3 41270 41270 0 none
…这就是我在重新分配后看到的:
kafka/bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group myGroup --zookeeper zkhost1:2181 --topic myTopic
Group Topic Pid Offset logSize Lag Owner
myGroup myTopic 0 925230 925230 0 none
myGroup myTopic 1 925230 925230 0 none
myGroup myTopic 2 925230 925230 0 none
myGroup myTopic 3 925230 925230 0 none
Group Topic Pid Offset logSize Lag Owner
myGroup myTopic 0 23251 23252 1 none
myGroup myTopic 1 41281 41281 0 none
myGroup myTopic 2 23260 23260 0 none
myGroup myTopic 3 41270 41270 0 none
对我来说,这提出了几个问题:
- 为什么日志大小现在大大减少了?重新分配是否会引发一些清理?(我们没有设置字节限制)
- 为什么在重新分配之前,所有4个分区的大小大致相同,而在重新分配之后,分区0,2和1,3之间有这么大的差异?一个主题的所有分区是否应该具有相同的日志大小,或者我是否误解了这里的概念
- 这样的事情(即重新分配分区)会导致数据丢失吗?(在本例中,我看不到任何关于我们消费者的信息)。如果是这样的话,有没有一种方法可以避免这种风险