Cannot produce kafka message on kubernetes

5/4/2020

I'm getting error on kafka: [2020-05-04 12:46:59,477] ERROR [KafkaApi-1001] 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)

And error when I'm trying to produce message: 2020-05-04 12:47:45.221 WARN 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient : [Producer clientId=producer-1] Error while fetching metadata with correlation id 10 : {activate-user=LEADER_NOT_AVAILABLE}

Using docker-compose everything works fine but I'm trying to move it also to k8s. I started that process with kompose convert tool and modify the output.

Here is a fragment of the docker-compse:

  zookeeper:
    container_name: zookeeper
    image: wurstmeister/zookeeper:latest
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
    ports:
      - "2181:2181"
  mail-sender-kafka:
    container_name: mail-sender-kafka
    image: wurstmeister/kafka:2.12-2.2.1
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_HOST_NAME: mail-sender-kafka
      KAFKA_CREATE_TOPICS: "activate-user:1:1"
    ports:
      - 9092:9092
    depends_on:
      - zookeeper
  account-service:
    image: szastarek/food-delivery-account-service:${TAG}
    container_name: account-service
    environment:
      - KAFKA_URI=mail-sender-kafka:9092
    depends_on:
      - config-server
      - account-service-db
  mail-sender:
    image: szastarek/food-delivery-mail-sender:${TAG}
    container_name: mail-sender
    environment:
      - KAFKA_URI=mail-sender-kafka:9092
    depends_on:
      - config-server

After converting it to k8s I've got zookeeper-deployment, zookeeper-service, mail-sender-deployment, mail-sender-kafka-deployment, mail-sender-kafka-service.

I've also tried to add some env variables and for now, it looks like that:

 spec:
      containers:
      - env:
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: mail-sender-kafka
        - name: KAFKA_ADVERTISED_PORT
          value: '9092'
        - name: ADVERTISED_LISTENERS
          value: PLAINTEXT://mail-sender-kafka:9092
        - name: KAFKA_CREATE_TOPICS
          value: activate-user:1:1
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: zookeeper:2181

I've found one thing that probably is connected with the problem. When I run ping mail-sender-kafka on docker I can reach myself. But if I connect to kubernetes mail-sender-kafka pod then I cannot ping myself.

After update the hosts file it works. There was something like:

172.18.0.24     mail-sender-kafka-xxxxxxx

And I changed it to

172.18.0.24     mail-sender-kafka

Any tips about how should I fix it?

-- Arek Szast
apache-kafka
docker
java
kubernetes
microservices

0 Answers