[英]How to handle kafka leader failover with two nodes for a topic with 2 partitions and 2 replicas?
我在多節點環境中使用 kafka 來測試故障轉移的工作原理。 實際上,我有 2 個 VM,每個 VM 內有 1 個 kafka 節點,而兩個 VM 之一內只有 1 個 zookeeper。 我知道沒有最佳的生產配置,但它只是為了訓練自己並更好地理解事物。
這是我的配置: VM1 ip: 192.168.64.2(只有一個 broker.id=2 的代理) VM2 ip: 192.168.64.3(在這里運行 zookeeper,broker.id=1)
我通過podman啟動kafka(這不是podman的問題,一切都配置好)
在 VM1 上:
podman run -e KAFKA_BROKER_ID=2 -e KAFKA_ZOOKEEPER_CONNECT=192.168.64.3:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9093,PLAINTEXT_HOST://192.168.64.2:29092 -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=2 -e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT_HOST -e UNCLEAN_LEADER_ELECTION_ENABLE=true --pod zookeeper-kafka confluentinc/cp-kafka:latest
在 VM2 上:
podman run -e KAFKA_BROKER_ID=1 -e KAFKA_ZOOKEEPER_CONNECT=localhost:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092,PLAINTEXT_HOST://192.168.64.3:29092 -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=2 -e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT_HOST -e UNCLEAN_LEADER_ELECTION_ENABLE=true --pod zookeeper-kafka confluentinc/cp-kafka:latest
現在我創建一個主題“訂單”:
./kafktopics --create --bootstrap-server 192.168.64.2:29092,192.168.64.3:29092 --replication-factor 2 --partitions 2 --topic orders
然后我創建一個生產者:
./kafkconsole-producer --broker-list 192.168.64.2:29092,192.168.64.3:29092 --topic orders
還有一個消費者:
./kafka-console-consumer --bootstrap-server 192.168.64.2:29092,192.168.64.3:29092 --topic orders```
這是我正在嘗試做的事情:
ERROR Error when sending message to topic orders with key: null, value: 9 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for orders-0:120000 ms has passed since batch creation
我真的不明白這里發生了什么? 一開始它運行良好,但在啟動/停止/啟動代理之后,它開始失敗。 我需要准確地說我永遠不會同時殺死 2 個經紀人。
你能解釋一下我在這里缺少什么嗎?
謝謝你們:)
編輯
要完成以下評論:
@OneCricketeer,我把你評論的答案放在這里。
在啟動時,一切都很好:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: orders Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
殺死VM2后:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2
Topic: orders Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2
殺死VM1后:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 1 Replicas: 2,1 Isr: 1
Topic: orders Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1
殺死VM2后:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2
Topic: orders Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2
(從這里開始,生產者不能再發布消息了)
我把你評論的答案放在這里。
在啟動時,一切都很好:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: orders Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1,2
殺死VM2后:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2
Topic: orders Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2
殺死VM1后:
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 1 Replicas: 2,1 Isr: 1
Topic: orders Partition: 1 Leader: 1 Replicas: 1,2 Isr: 1
殺死VM2后:(從這里,生產者不能再發布消息了)
Topic: orders TopicId: I3hMNln9TpSuo76xHSpMXQ PartitionCount: 2 ReplicationFactor: 2 Configs:
Topic: orders Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2
Topic: orders Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2
經過長時間閱讀和調查有關kafka的事情,我終於找到了我的問題的答案。
只有 2 個代理,我需要以下配置
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=2
KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS=1
問題是偏移主題的默認分區數。 (如果我沒記錯的話,那是 50 次中的 49 次)。
現在只有一個分區和 2 個副本,一切正常,我可以啟動/停止/啟動/停止/....
希望這可以幫助將來的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.