在重新分配分区时(特别是logsize),Kafka会发生什么?

teh*_*ehK 5 apache-kafka

所以我们目前正在尝试使用Kafka 0.9,并且几乎处于概念验证阶段.我们刚开始研究它并试图找出它,如果它是我们需要的.还有一些学习要做,所以请在这里忍受我:)

目前的设置如下:

  • 3个Kafka经纪人在不同的主机上:zkhost1,zkhost2,zkhost3
  • 一个主题:"myTopic"
  • 该主题有4个分区
  • 复制因子为1
  • 我们有一个生产者和三个消费者,都在同一个消费者群体"myGroup"中

现在我尝试使用kafka-reassign-partitions.sh脚本更改复制因子.为此我创建了以下JSON文件:

{"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]}
    ]
}
Run Code Online (Sandbox Code Playgroud)

...然后执行脚本:

kafka/bin/kafka-reassign-partitions.sh --zookeeper zkhost1:2181,zkhost2:2181,zkhost3:2181 --reassignment-json-file increase-replication-factor.json --execute
Run Code Online (Sandbox Code Playgroud)

这顺利进行,之后我得到了预期的复制:

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
Run Code Online (Sandbox Code Playgroud)

我不明白的是,在重新分配期间分区发生了什么.当我查看ConsumerOffsetChecker时,这是我重新分配之前看到的:

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
Run Code Online (Sandbox Code Playgroud)

......这是我重新任命看到的:

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
Run Code Online (Sandbox Code Playgroud)

对我来说,这提出了一些问题:

  • 为什么logSize现在大幅减少?重新分配会引发一些清理吗?(我们没有设置字节限制)
  • 为什么在重新分配之前所有4个分区的大小大致相同,而在重新分配之后,分区0,2和1,3之间有这么大的差异?一个主题的所有分区都不应该具有相同的logSize,还是我误解了这个概念?
  • 这样的事情(即重新分配分区)会导致数据丢失吗?(在这种情况下我无法看到我们的消费者).如果是这样,有没有办法在没有这种风险的情况下做到这一点?

感谢您的回答和问候,

/ tehK