Kafka群集增加副本因子不起作用

时间:2018-11-29 22:43:16

标签: apache-kafka kafka-cluster

您好,按照本文档中的步骤操作时,我会遇到一个奇怪的问题,那就是增加卡夫卡的复制因子:https://kafka.apache.org/documentation/#basic_ops_increase_replication_factor

症状看起来完全没有复制因子。

请帮助

我的Kafka设置为

Kafka版本:kafka_2.12-2.1.0

服务器:主机名服务器-0(192.168.0.1)

  • Kafka经纪人ID:0
  • 卡夫卡港口:9092
  • 动物园管理员端口:2181

服务器:主机名服务器1(192.168.0.2)

  • 卡夫卡经纪人ID:1
  • 卡夫卡港口:9092
  • 服务器1上没有Zookeeper

主题

  • 主题数:1
  • 主题名称:DATA
  • 分区数:1

仅从服务器0首先使用复制因子1创建DATA主题

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic DATA

结果看起来像

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic DATA Topic:DATA PartitionCount:1 ReplicationFactor:1 Configs: Topic: DATA Partition: 0 Leader: 0 Replicas: 0 Isr: 0

创建主题后,我产生了一些测试消息

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic DATA message 1 message 2

然后仅通过在server-0中运行命令,将主题DATA的复制因子增加到2

下面的json文件与Kafka-reassign-partitions.sh一起使用以增加复制因子

{ "version":1, "partitions":[ {"topic":"DATA","partition":0,"replicas":[0,1]} ] }

命令行:

bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file topics-to-expand.json --execute

表面上,通过描述主题看起来效果不错

bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic DATA Topic:DATA PartitionCount:1 ReplicationFactor:2 Configs: Topic: DATA Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1

我在这里制作了更多测试消息

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic DATA message 3 message 4

但是,当我尝试从服务器1进行测试时会出现问题

现在我通过

从server-0杀死了kafka进程

kill -9 [kafka-pid]

当我从server-1运行console-consumer时出现问题

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic DATA --from-beginning

没有消息出现,控制台只是在黑屏处阻塞。

我认为根据文档,我应该能够看到消息,因为副本是同步的吗?不?

描述主题显示

bin/kafka-topics.sh --zookeeper server-0:2181 --describe --topic DATA Topic:DATA PartitionCount:1 ReplicationFactor:2 Configs: Topic: DATA Partition: 0 Leader: 1 Replicas: 0,1 Isr: 1

然后我从服务器0重新启动了kafka进程,消费者控制台屏幕突然显示了历史记录中的所有消息

message 1 message 2 message 3 message 4

服务器1的使用者似乎没有在本地使用服务器1的任何数据,因为主题数据没有复制到服务器1。相反,它仍然等待服务器0重新提供数据。甚至server-1也被标记为领导者。

谁能复制我的问题? 我想附加我的属性,但我不知道如何在stackoverflow中附加文件,对此感到抱歉...

1 个答案:

答案 0 :(得分:1)

受到这篇文章的启发,并找出了原因。

Killing node with __consumer_offsets leads to no message consumption at consumers

出现上述症状的原因是因为默认为offsets.topic.replication.factor=3,但集群中只有2个代理(节点)。当Kafka首次创建__consumer_offsets主题时,它会默默地失败(ya牛)回到offsets.topic.replication.factor=1

在属性文件中更改offsets.topic.replication.factor=2解决了上述问题。 (是的!)

相关问题