Wenn es keine min.insync.replicas verfügbar ist und Produzent verwendet ack = alle, dann wird die Nachricht nicht verpflichtet und Verbraucher wird diese Nachricht nicht erhalten, auch nach abgestürzte Replikate kommen zurück und werden erneut zur ISR-Liste hinzugefügt. Sie können dies auf folgende Weise testen.
starten zwei Makler mit min.insync.replicas = 2
$ ./bin/kafka-server-start.sh ./config/server-1.properties
$ ./bin/kafka-server-start.sh ./config/server-2.properties
erstellen Thema mit 1 Partition und RF = 2. Stellen Sie sicher, dass sich beide Broker in der ISR-Liste befinden.
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --create --topic topic1 --partitions 1 --replication-factor 2
Created topic "topic1".
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --describe --topic topic1
Topic:topic1 PartitionCount:1 ReplicationFactor:2 Configs:
Topic: topic1 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Konsole Console-Hersteller und Konsole ausführen. Stellen Sie sicher, dass das Produkt ack = -1 verwendet
$ ./bin/kafka-console-consumer.sh --new-consumer --bootstrap-server kafka-1:9092,kafka-2:9092 --topic topic1
$ ./bin/kafka-console-producer.sh --broker-list kafka-1:9092,kafka-2:9092 --topic topic1 --request-required-acks -1
Produzieren Sie einige Nachrichten. Der Verbraucher sollte sie erhalten.
Töten Sie einen der Makler (Ich tötete Broker mit ID = 2). Überprüfen Sie, dass die ISR-Liste auf einen Broker reduziert ist.
$ ./bin/kafka-topics.sh --zookeeper zookeeper-1 --describe --topic topic1
Topic:topic1 PartitionCount:1 ReplicationFactor:2 Configs:
Topic: topic1 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1
Versuchen Sie erneut zu produzieren. In dem Hersteller sollten Sie einige
Error: NOT_ENOUGH_REPLICAS
(eine pro Wiederholungs) und schließlich
Messages are rejected since there are fewer in-sync replicas than required.
Consumer nicht erhalten diese Nachrichten bekommen.
Starten Sie den getöteten Broker neu und versuchen Sie erneut zu produzieren. Der Kunde erhält diese Nachricht, aber nicht die Nachricht, die Sie gesendet haben, als eines der Replikate ausgefallen ist.
Also die Nachricht wird letztlich an die Verbraucher geliefert werden, obwohl der Broker das dem Hersteller nicht bestätigt hat. – Vikk
In diesem Fall ja. –