在 Kafka 上测试 "fail-over"
Testing "fail-over" on Kafka
设置 1:
OS: Windows 10
动物园管理员
3 ZooKeeper
个从 Apache
下载的实例(使用 v3.5.6
和 v.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-1 或 Kafka- 中创建2,不是两个。因此,当我尝试进行故障转移时,故障转移将失败,具体取决于我正在写入哪个主题,以及哪个 Kafka
被关闭。
简而言之,如果您有 X Kafka
个实例,则主题 replication-factor
需要是 X(offsets.topic.replication.factor
也是如此)
设置 1:
OS: Windows 10
动物园管理员
3 ZooKeeper
个从 Apache
下载的实例(使用 v3.5.6
和 v.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-1 或 Kafka- 中创建2,不是两个。因此,当我尝试进行故障转移时,故障转移将失败,具体取决于我正在写入哪个主题,以及哪个 Kafka
被关闭。
简而言之,如果您有 X Kafka
个实例,则主题 replication-factor
需要是 X(offsets.topic.replication.factor
也是如此)