Кафка рекламировал слушателя через AWS privatelink

#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 для захвата протокола Кафки для более детальной диагностики.