Connect to Kafka inside VirtualBox

Refresh

December 2018

Views

1.5k time

5

I'm having troubles connecting from my Host (Windows) to Guest (Linux) where I installed Kafka.

I have set up a VM (with VirtualBox) where I installed Confluent tools. In this VM, I run the command:

confluent start schema-registry

It starts zookeeper, kafka, and schema-registry.

Under this VM, I can run

kafka-console-producer --broker-list localhost:9092 --topic test

and

kafka-console-consumer --bootstrap-server localhost:9092 --topic test

and everything is working fine, I can produce and receive messages.

My goal is however to be able to produce and consume messages from my Host, so I setup this port forwarding rule : port forwarding rule

From my Windows, I was expecting this command to work:

bin\windows\kafka-console-producer.bat --broker-list 127.0.0.1:9092 --topic test

But all I get is this :

ERROR Error when sending message to topic test with key: null, value: 3 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-0: 1529 ms has passed since batch creation plus linger time 

I've tried many different stuff but still can't find a solution.... Any ideas?

2 answers

3

Казалось бы, имя хоста Зазор между гостем и принимающей стороной. Что имя хоста действительно есть Linux гость?

Когда производитель / потребитель обращается к брокеру Кафка, брокер Кафки возвращает имя хоста для производителя данных или потребителя в настройках по умолчанию. Таким образом, производители / потребители должны разрешить имя хоста брокера к IPaddress.

Для брокера , возвращающего произвольное имя хоста, используйте advertised.listenersнастройки.

Подробности в самых «advertised.listeners» конфигурации документации .

0

Я пытался создать что-то подобное. Хотя это, вероятно, лучше настроить собственную виртуальную сеть для Кафки и Zookeeper, я насадить и хочу поделиться своим личным подходом.

У меня есть вещи , чтобы работать с Кафка и Zookeeper функционирующей на самом VirtualBox Linux гостя, а также грузчик на основе решения , работающее на Linux , что гость. Вот docker-compose.ymlя в гостевой:

version: '3'

services:

  zookeeper:
    image: "wurstmeister/zookeeper"
    ports:
      - "2181:2181"

  kafka:
    image: "wurstmeister/kafka"
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: "localhost"
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

Суть вот KAFKA_ADVERTISED_HOST_NAME, что делает маленький грязный трюк , который хорошо играет с сетью NAT на основе значения по умолчанию в VirtualBox (если вы уже исправлены 2181и 9092через как и OP). С помощью этого трюка любого потребителя или производителя на VirtualBox хосте ОС будет узнать от Кафки , что он находится на "localhost", который решает в хост , а потому , что порт на хосте пропатчен до гостевых вещей в конечном итоге в нужном месте.

Правильный способ сделать то же самое в 1.x является использование рекламируемого Слушателей свойства, но принцип остается тем же.


Для справки, вот мои настройки VirtualBox:

порт 9092 и 2181 пересылается

С такими параметрами, после того, как docker-compose upна гостевой ОС, я мог бы перечислить / создавать темы и потреблять / выдавать сообщения от хостовой ОС.