Брокер Kafka считает, что брокеров нет (даже самого себя) - PullRequest
0 голосов
/ 24 марта 2019

Вопрос

Я пытаюсь запустить один экземпляр Kafka в докере. Я могу создавать темы, но не могу потреблять или производить их. Когда я пытаюсь, мой брокер Kafka регистрирует сообщение об ошибке.

kafka_1      | [2019-03-24 16:45:05,263] ERROR [KafkaApi-5] Number of alive brokers '0' does not meet the required replication factor '1' for the offsets topic (configured via 'offsets.topic.replication.factor'). This error can be ignored if the cluster is starting up and not all brokers are up yet. (kafka.server.KafkaApis)

Я не понимаю бит Number of alive brokers '0', поскольку это брокер Kafka, который регистрирует это, так что наверняка должен быть хотя бы один (сам) брокер?

Я использую файл server.properties по умолчанию со следующими изменениями:

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://192.168.0.109:9092
zookeeper.connect=zookeeper:2181

, где 192.168.0.109 - это IP-адрес хост-машины.

Файлы

докер-Compose

version: '3.4'
services:
  zookeeper:
    build:
      context: ./
      dockerfile: zookeeper.dockerfile
      network: host
    image: zookeeper
    ports:
      - "2181:2181"
  kafka:
    build:
      context: ./
      dockerfile: kafka.dockerfile
      network: host
    image: kafka
    ports:
      - "9092:9092"

kafka.dockerfile

FROM alpine:3.7

# Set the name for a non-priliaged user
ENV APPUSER=appuser

# Install dependnacies
RUN apk add bash
RUN apk add openjdk8-jre

# Add a non-privilaged user and change into it's home directory
RUN adduser -D $APPUSER
WORKDIR /home/$APPUSER

# Download kafka and set its owner to $APPUSER
RUN wget https://www-eu.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
RUN chown $APPUSER kafka_2.11-2.1.0.tgz

# Change to the non-privilaged user
USER $APPUSER

# Extract kafka
RUN tar -xzf kafka_2.11-2.1.0.tgz

# copy custom server.properties into image 
COPY ./server.properties ./

# Set working directory to kafka dir
WORKDIR /home/$APPUSER/kafka_2.11-2.1.0

# start kafka with customer server.properties file
CMD ["bin/kafka-server-start.sh", "../server.properties"]

zookeeper.dockerfile

FROM alpine:3.7

# Set the name for a non-priliaged user
ENV APPUSER=appuser

# Install dependnacies
RUN apk add bash
RUN apk add openjdk8-jre

# Add a non-privilaged user and change into it's home directory
RUN adduser -D $APPUSER
WORKDIR /home/$APPUSER

# Download kafka and set its owner to $APPUSER
RUN wget https://www-eu.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
RUN chown $APPUSER kafka_2.11-2.1.0.tgz

# Change to the non-privilaged user
USER $APPUSER

# Extract kafka
RUN tar -xzf kafka_2.11-2.1.0.tgz

# Set working directory to kafka dir
WORKDIR /home/$APPUSER/kafka_2.11-2.1.0

# Run zookeeper
CMD ["bin/zookeeper-server-start.sh", "config/zookeeper.properties"]

1 Ответ

0 голосов
/ 26 марта 2019

Это зависит от конфигурации слушателей.

Если вы укажете advertised.listeners=PLAINTEXT://192.168.0.109:9092, Kafka попытается подключиться к 192.168.0.109 из в контейнере Docker . Но если это адрес хоста, и если вы не настроили соответствующий сетевой мастер Docker, он потерпит неудачу.

Если вы укажете advertised.listeners=PLAINTEXT://localhost:9092, Kafka подключится к localhost в контейнере Docker, что, конечно, само по себе . Подвох в том, что вы не сможете использовать клиент Kafka вне контейнера Docker (либо на вашем хост-компьютере, либо в другом контейнере Docker), поскольку они будут пытаться локально подключиться к localhost - к себе на котором не было бы брокера Kafka.

Эта статья объясняет более подробно проблему и соответствующую конфигурацию для использования. Если вам нужен предварительно собранный пример Kafka в Docker, тогда этот Docker Compose показывает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...