Как подключиться к трем брокерам Kafka из-за пределов Docker?C#

Место общения программистов C#
Ответить
Anonymous
 Как подключиться к трем брокерам Kafka из-за пределов Docker?

Сообщение Anonymous »

Я хочу создать Kafka с тремя брокерами в Docker и использовать их в приложении C# вне Docker.
У меня есть это в моем docker-compose:

Код: Выделить всё

  kafka1:
image: confluentinc/cp-kafka:latest
container_name: kafka1
environment:
KAFKA_BROKER_ID: 1
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9094,CONTROLLER://:9093
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka1:9092,OUTSIDE://host.docker.internal:9094
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka1:9093,2@kafka2:9093,3@kafka3:9093
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
KAFKA_LOG_DIRS: /var/lib/kafka/data
KAFKA_SOCKET_REQUEST_MAX_BYTES: 209715200
CLUSTER_ID: "1"
ports:
- 65000:9092 # Mapping for INSIDE
- 65001:9093 # Mapping for CONTROLLER
- 65006:9094 # Mapping for OUTSIDE
networks:
- mynetwork
И аналогичный для kafka2 и kafka3.
Код моего приложения C# .NET:

Код: Выделить всё

await _kafkaService.InitializeKafkaTopics(); // it creates my-topic

var config = new ConsumerConfig
{
GroupId = "my-group-id",
BootstrapServers = "host.docker.internal:65006,host.docker.internal:65007,host.docker.internal:65008",
AutoOffsetReset = AutoOffsetReset.Earliest,
PartitionAssignmentStrategy = PartitionAssignmentStrategy.RoundRobin
};

using var consumer = new ConsumerBuilder(config).Build();
consumer.Subscribe("my-topic");

var task = Task.Run(async () =>
{
try
{
while (true)
{
var consumeResult = consumer.Consume();
await processMessageAsync(consumer, consumeResult);
}
}
catch (ConsumeException e)
{
_logger.LogError("Error in consumer");
processErrorHandler(e.Error);
}
});
Но я продолжаю получать:

%3|1726579828.152|FAIL|rdkafka#producer-1| [thrd:kafka3:9092/bootstrap]: kafka3:9092/bootstrap: не удалось разрешить «kafka3:9092»: неизвестный хост. (после 2322 мс в состоянии CONNECT)
%3|1726579828.153|ОШИБКА|rdkafka#producer-1| [thrd:app]: rdkafka#producer-1: kafka3:9092/bootstrap: Не удалось разрешить «kafka3:9092»: неизвестный хост. (после 2322 мс в состоянии CONNECT)
%3|1726579828.868|FAIL|rdkafka#producer-1| [thrd:kafka2:9092/bootstrap]: kafka2:9092/bootstrap: не удалось разрешить «kafka2:9092»: неизвестный хост. (после 2336 мс в состоянии CONNECT)
%3|1726579828.869|ОШИБКА|rdkafka#producer-1| [thrd:app]: rdkafka#producer-1: kafka2:9092/bootstrap: Не удалось разрешить «kafka2:9092»: неизвестный хост. (после 2336 мс в состоянии CONNECT)
%3|1726579829.164|FAIL|rdkafka#producer-1| [thrd:kafka1:9092/bootstrap]: kafka1:9092/bootstrap: не удалось разрешить «kafka1:9092»: неизвестный хост. (после 2325 мс в состоянии CONNECT)
%3|1726579829.164|ОШИБКА|rdkafka#producer-1| [thrd:kafka1:9092/bootstrap]: 3/3 брокеров не работают

Это означает, что он пытается получить к нему доступ из-за пределов Docker, как если бы он был внутри Docker.
Я читал подобные темы на StackOverflow, но они не работают с тремя брокерами Kafka одновременно, а некоторые из них даже предлагают не использовать порты в docker-compose. Я не понимаю, как это может работать, если я не использую порты, потому что мне нужно использовать их извне. Остальные посты также посвящены Zookeeper, которым я не пользуюсь.
Что я делаю не так? Как мне убедиться, что я могу прочитать эти три темы Kafka из моего приложения C# .NET вне Docker?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/789 ... ide-docker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»