У меня есть кластер kafka с 3 брокерами, настроенный в AWS VPC с кубернетами, я использую https://github.com/Yolean/kubernetes-kafka репо для этого.
У меня странная проблема с тем, что я могу нормально подключаться, создавать и принимать сообщения. Когда я подключаюсь извне, с помощью большого количества отладок с kafkacat я вижу, что первоначальное соединение с брокерами работает, объявленные метаданные прослушивателей верны, и эти другие брокеры даже изменят свой статус на UP.
Однако как только я пытаюсь потреблять из темы извне через kafkacat. Внезапно правильные адреса не могли быть определены.
Брокеры извне прослушивают CNAME с псевдонимом AWS LoadBalancer. Это на VPC с высокой доступностью, поэтому балансировщики нагрузки имеют 3 IP-адреса, даже если модуль будет использовать только один? (Не сетевой инженер или парень DevOps, а просто студент-программист ...).
Вот точный пример (создан на моем кластере, изменены доменные имена):
user@comp:~/kubernetes-kafka$ kafkacat -L -b broker0.my-domain:9094 -t test-kafkacat
Metadata for test-kafkacat (from broker -1: broker0.my-domain:9094/bootstrap):
3 brokers:
broker 0 at broker0.my-domain:9094
broker 2 at broker2.my-domain:9094
broker 1 at broker1.my-domain:9094
1 topics:
topic "test-kafkacat" with 3 partitions:
partition 0, leader 0, replicas: 0,1, isrs: 0,1
partition 2, leader 2, replicas: 2,0, isrs: 2,0
partition 1, leader 1, replicas: 1,2, isrs: 1,2
user@comp:~/kubernetes-kafka$ kafkacat -C -b broker0.my-domain:9094 -t test-kafkacat
% ERROR: Local: Host resolution failure: broker2.my-domain:9094/2: Failed to resolve 'broker2.my-domain:9094': Name or service not known
% ERROR: Local: Host resolution failure: broker0.my-domain:9094/0: Failed to resolve 'broker0.my-domain:9094': Name or service not known
% ERROR: Local: Host resolution failure: broker1.my-domain:9094/1: Failed to resolve 'broker1.my-domain:9094': Name or service not known
И пример того, как я использую внутренние адреса для приема сообщений из того же кластера:
user@comp:~/kubernetes-kafkakubectl --namespace test-kafka exec kafkacat-bk9rt -- kafkacat -C -b bootstrap.kafka:9092 -t test-kafkacat
Defaulting container name to producer.
Use 'kubectl describe pod/kafkacat-bk9rt -n test-kafka' to see all of the containers in this pod.
26:18,943654404+00:00 ---
Test kafkacat-bk9rt@2019-01-16T13:26:34,574792563+00:00
Test kafkacat-bk9rt@2019-01-16T13:26:44,537682179+00:00
Test kafkacat-bk9rt@2019-01-16T13:26:54,534127421+00:00
Test kafkacat-bk9rt@2019-01-16T13:27:04,532323895+00:00
Test kafkacat-bk9rt@2019-01-16T13:27:14,534851898+00:00