#docker #apache-kafka #listener #aws-private-link
Вопрос:
У меня есть два виртуальных компьютера в AWS:
В VPC-A есть экземпляр ec2.
В VPC-B есть экземпляр ec2, в котором запущены kafka и zookeeper через docker-compose
VPC подключены через AWS Privatelink (конечная точка — > служба конечных точек — > > nlb (в VPC-B) ->>> кафка) Я дал конечной точке privatelink DNS-имя: broker.confluent-игровая площадка
Я могу нормально подключиться по телетайпу как к порту 9092, так и к порту 2181 из VPC A в Кафку и Zookeeper в VPC-B. Никаких проблем
[ec2-user@ip-10-1-0-90 etc]$ telnet broker.confluent-playground 9092
Trying 10.1.1.200...
Connected to broker.confluent-playground.
Моя проблема в том, что, хотя сетевое подключение существует между виртуальными компьютерами, у меня, похоже, возникают проблемы с конфигурацией прослушивателя кафки. Когда я устанавливаю для объявленных.слушателей значение broker.confluent-playground:9092, мой продюсер, похоже, не может подключиться, и при запуске kafkacat-b broker.confluent-playground-L я перечисляю только 7 из 40 тем. (они кажутся внутренними системными темами, например «_confluent_balancer_partition_samples»).
Вот выдержка из файла docker-compose:
broker:
image: confluentinc/cp-server:6.1.1
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "9092:9092"
- "9101:9101"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://broker:29092,EXTERNAL://broker.confluent-playground:9092
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
Теперь, если я изменю объявленного слушателя на частный IP-адрес ec2, владеющего кафкой, т. Е.:
От
EXTERNAL://broker.confluent-playground:9092
Для
EXTERNAL://192.168.35.65:9092
тогда kafkacat в VPC-A сможет правильно просмотреть все 40 тем! Я все еще не могу произвести (потому что я предполагаю, что мне дали объявленный частный ip-адрес в другой сети).
Кажется, у меня где-то перепутались эти конфигурации прослушивателей, и я не понимаю, как, изменив рекламируемый прослушиватель, я могу получить подмножество тем с одним параметром, а затем все темы с другим.
Еще одна интересная вещь
Мое сканирование kafkacat с помощью broker.confluent-рекламируемый прослушиватель игровой площадки возвращает это
[ec2-пользователь@ip-10-1-0-90 ~]$ sudo docker run —rm —сеть=хост edenhill/kafkacat:1.5.0 брокер kafkacat -b.confluent-игровая площадка:9092 -L
Metadata for all topics (from broker 1: broker.confluent-playground:9092/1):
1 brokers:
broker 1 at broker.confluent-playground:9092 (controller)
7 topics:
И когда я использую частный IP-адрес как (который я не могу получить из VPC-A) в качестве рекламируемого слушателя, я получаю /начальную загрузку со всеми темами:
[ec2-user@ip-10-1-0-90 ~]$ sudo docker run --rm --network=host edenhill/kafkacat:1.5.0 kafkacat -b broker.confluent-playground:9092 -L
Metadata for all topics (from broker -1: broker.confluent-playground:9092/bootstrap):
1 brokers:
broker 1 at 192.168.54.226:9092 (controller)
40 topics:
Комментарии:
1. Возможно, у вас есть более одного экземпляра EC2, стоящего за одним и тем же NLB, но брокеры Кафки не знают друг о друге, поскольку они развернуты внутри контейнеров Docker на каждом экземпляре EC2? Если бы темы были созданы только в одном из этих экземпляров, то при прямом подключении были бы показаны все темы, но при подключении через NLB вы могли бы перейти в другой экземпляр EC2, содержащий только темы системного уровня. Рассмотрите возможность использования tcpdump для захвата протокола Кафки для более детальной диагностики.