Потребитель Kafka не может потреблять с внешнего сервера Kafka - PullRequest
0 голосов
/ 21 мая 2018

У меня Zookeeper и Kafka, работающие на физическом сервере, и я собрал докер-контейнер, на котором запущено Java-приложение для подключения к внешнему Kafka в качестве потребителя.

Порт прослушивания Kafka:

[helio@dev-01 kafka]$ netstat -an|grep 9092
tcp6       0      0 :::9092                 :::*                    LISTEN

Я использую общую сеть Docker, но потребительское приложение не может подключиться к kafka.Я вижу, что могу получить IP-адрес kafka изнутри контейнера ... Я попытался просто увидеть, что я могу получить доступ к kafka-серверу из сети:

в контейнере:

root@ff419d41540a:~# ssh -p 9092 192.168.1.251

в журнале Kafka я вижу тестовое соединение:

[2018-05-21 12:33:39,093] WARN [SocketServer brokerId=0] Unexpected error from /172.17.0.2; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = 1397966893 larger than 104857600)
        at org.apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.java:132)
        at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:93)
        at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:235)
        at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:196)
        at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:557)
        at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:495)
        at org.apache.kafka.common.network.Selector.poll(Selector.java:424)
        at kafka.network.Processor.poll(SocketServer.scala:628)
        at kafka.network.Processor.run(SocketServer.scala:545)
        at java.lang.Thread.run(Thread.java:748)

Итак, есть ли какие-либо ограничения на это?Некоторое ограничение по значению порта?

Если я запускаю контейнер Consumer Docker с параметром --network = host (host host), тогда приложение-потребитель может подключаться к Kafka и работает нормально.

Спасибо

1 Ответ

0 голосов
/ 21 мая 2018

Я мог бы включить больше журналов в потребительской библиотеке Kafka, чтобы понять проблему.Даже используя IP: порт, чтобы определить сервер Kafka, как показано в журнале:

16:34:04.670 [main] INFO  o.a.k.c.consumer.ConsumerConfig - ConsumerConfig     values:
        auto.commit.interval.ms = 5000
        auto.offset.reset = latest
        bootstrap.servers = [192.168.1.251:9092]

, но другой журнал потребителей kafka показал, что он получает имя хоста (физический сервер), и как только контейнер не может разрешить это имяпотребитель не работает:

16:34:08.861 [Consumer] INFO  o.a.k.c.c.i.AbstractCoordinator - [Consumer clientId=consumer-1, groupId=messageRouterConsumer] Group coordinator dev-01:9092 (id: 2147483647 rack: null) is unavailable or invalid, will attempt rediscovery

Так что я мог бы обойти эту проблему, добавив сервер имени хоста kafka в контейнер / etc / hosts:

echo "192.168.1.251   dev-01" >> /etc/hosts

А затем приложение Kafka Consumer внутриконтейнер начал потреблять из темы.

...