在 Kafka 上测试 "fail-over"

Testing "fail-over" on Kafka

设置 1:

OS: Windows 10

动物园管理员

3 ZooKeeper 个从 Apache 下载的实例(使用 v3.5.6v.3.4.14 测试):
(1)apache-zookeeper-3.5.6-bin_1
(2) apache-zookeeper-3.5.6-bin_2 (副本1)
(3) apache-zookeeper-3.5.6-bin_3 (副本1)

zoo.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper_3.4.14_1
clientPort=2181
admin.serverPort=10081
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
4lw.commands.whitelist=*

zoo.cfg:
...
dataDir=/tmp/zookeeper_3.4.14_2
clientPort=2182
admin.serverPort=10082
...

zoo.cfg:
...
dataDir=/tmp/zookeeper_3.4.14_3
clientPort=2183
admin.serverPort=10083
...

myid file in dataDir with values 1,2 and 3 respectively

卡夫卡

2 Kafka 个实例:
(1) kafka_2.12-2.3.0_1
(2) kafka_2.12-2.3.0_2 (副本1)

server.properties:
...
broker.id=1
listeners=PLAINTEXT://:9091
log.dirs=/tmp/kafka-logs-1
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
...

server.properties:
...
broker.id=2
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-logs-2
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
...

Spring

spring-boot-starter-* 2.2.0.RELEASE
spring-kafka-2.3.1.RELEASE

============================================= ========================

设置 2:

与设置1相同,唯一的区别是我没有使用从[=14=下载的ZooKeeper,而是使用[=18=附带的ZooKeeper ].

============================================= ========================

问题

问题是,当我将 1 Kafka 调低时:

=> 设置 1 将 不会 故障转移,这意味着当我生成一条消息时,正在运行的 Kafka 没有收到消息 => 设置 2 将进行故障转移,这意味着当我生成消息时,正在运行的 Kafka 将收到消息

你们看到设置 1 有什么问题吗?

P.S如果您需要更多详细信息,我很乐意提供。

如果对某人有帮助:

我有 2 个 Kafka 个实例,但我创建的任何主题的 replication-factor 是 1 个(由于我的 misunderstanding/misinterpretation 它的含义)。

这意味着,在创建主题时,topic/s 将在 Kafka-1Kafka- 中创建2,不是两个。因此,当我尝试进行故障转移时,故障转移将失败,具体取决于我正在写入哪个主题,以及哪个 Kafka 被关闭。

简而言之,如果您有 X Kafka 个实例,则主题 replication-factor 需要是 X(offsets.topic.replication.factor 也是如此)