Первоначальные извинения за длинный пост (это также на суперпользователя, так как я не был уверен, что лучшее место для этого https://serverfault.com/questions/953357/kafka-multiple-listeners, поэтому дайте мне знать, если нужно закрыть). ..

Я настроил кластер Kafka в AWS со следующими слушателями и объявленными слушателями:

KAFKA_ADVERTISED_LISTENERS:           PLAINTEXT://ds-kafka-broker0.service.local:9092,INTERNAL://:9093,PRIVATE://ds-kafka-broker0.private.awscloud.co.uk:6000,EXTERNAL://ds-kafka-broker0.dev.awscloud.co.uk:7000
KAFKA_LISTENERS:                      PLAINTEXT://:9092,INTERNAL://:9093,PRIVATE://:6000,EXTERNAL://:7000
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT,PRIVATE:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME:     INTERNAL

Я должен сделать это, потому что мы запускаем гибридную среду AWS/On-Prem по прямому соединению.

В рамках AWS:

Мы используем VPCE для подключения к кластеру Kafka внутри учетных записей, поэтому хост для прослушивателя PRIVATE одинаков для каждой учетной записи и использует локальную частную зону R53.

On-Прем:

Частная зона не работает с локальной версией, поскольку мы не можем разрешить зоны private.awscloud.co.uk, которые находятся в каждой учетной записи AWS, поэтому мне приходится использовать другую зону, которая в Kafka вынуждает меня использовать другой приемник и диапазон портов. Это ВНЕШНИЙ слушатель.

Все они в настоящее время используют открытый текст, так как я все еще на стадии реализации, но оба в конечном итоге будут использовать одно и то же шифрование, но для моих текущих целей тестирования подключения это должно сработать. В качестве работающего кластера со всеми аксессуарами (connect, ksql, схема и т.д.) Все работает нормально из учетной записи AWS кластера Kafka.

Эта проблема:

Когда я подключаюсь к ВНЕШНИМ портам, используя следующие настройки generator.config:

bootstrap.servers=EXTERNAL://ds-kafka-broker0.dev.awscloud.co.uk:7000,EXTERNAL://ds-kafka-broker1.dev.awscloud.co.uk:7001,EXTERNAL://ds-kafka-broker2.dev.awscloud.co.uk:7002
#security.protocol=EXTERNAL   # commented out as this is not valid in console producer
compression.type=snappy
max.block.ms=5000
linger.ms=5
max.in.flight.requests.per.connection=1
retries=5
batch.size=1000
max.request.size=10000000
acks=1
buffer.memory=67108864

и используйте следующую командную строку производителя тестовой консоли:

bin/kafka-console-producer --producer.config etc/producer.properties --topic test-create-remote --broker-list EXTERNAL://ds-kafka-broker0.dev.awscloud.co.uk:7000,EXTERNAL://ds-kafka-broker1.dev.awscloud.co.uk:7001,EXTERNAL://ds-kafka-broker2.dev.awscloud.co.uk:7002

начальное соединение происходит на 7000, но затем Kafka сообщает клиенту, что он должен использовать прослушиватель PRIVATE, и трафик повторно подключается к диапазону частных портов 6000 (подтверждено с помощью tcpdump).

Это нормально, когда вы подключаетесь изнутри учетной записи AWS, поскольку именно для этого предназначен диапазон портов и приемник, но с точки зрения клиента у меня, похоже, нет никакого контроля над тем, какой приемник использовать. В этом случае не удается установить соединение с локального сервера, потому что я не могу разрешить адрес PRIVATE, и даже если бы я мог, я все равно не смог подключиться к порту.

Это также заставляет меня задуматься, почему я получаю ЧАСТНОГО слушателя ... Почему не ВНУТРЕННИЕ или PLAINTEXT, если у меня нет контроля?

Надеюсь, что все это имеет смысл, и любые указатели приветствуются.

0