web-dev-qa-db-fra.com

Kafka ont des courtiers responsables sans auditeur correspondant)

J'essaie d'obtenir Kafka de travailler sur docker-compose pour la première fois. L'application fonctionne correctement sans docker. Mais sur docker, j'obtiens l'erreur décrite ci-dessous. Toute raison pour laquelle = Kafka lancerait cette erreur?

L'erreur:

email-service_1 | 2018-12-01 14: 32: 02.448 WARN 1 --- [ntainer # 0-0-C-1] oakcNetworkClient: [consommateur clientId = consommateur-2, groupId = kafka] 1 les partitions ont des courtiers chefs de file sans auditeur correspondant , y compris [email-token-0]

Ma config docker-compose:

version: '3.3'
    services:
     zookeeper:
      image: wurstmeister/zookeeper
      ports:
       - "2181:2181"

 kafka:
  image: wurstmeister/kafka
  command: [start-kafka.sh]
  environment:
   KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
   KAFKA_ADVERTISED_Host_NAME: 192.168.23.134
   KAFKA_CREATE_TOPICS: "email-token:1:1"
  volumes:
   - /var/run/docker.sock:/var/run/docker.sock
  ports:
   - "9092:9092"
  depends_on:
   - zookeeper

 email-service:
  build: ./email-service
  environment:
   SPRING_KAFKA_BOOTSTRAPSERVERS: kafka:9092
  ports:
   - "8081:8081"
  depends_on:
   - kafka
10
user2997204

Comme indiqué dans les commentaires de votre question, le problème semble être lié au nom annoncé du courtier Kafka). Selon votre composition docker, vous devriez utiliser 192.168.23.134 mais votre service de messagerie utilise kafka:9092. Vous pouvez essayer avec ce docker-compose. J'ai remplacé les services wurstmeister par le dernier Zookeeper et Kafka fourni par confluentinc et j'ai ajouté votre service de messagerie.

---
version: '2'
services:
zookeeper:
    image: confluentinc/cp-zookeeper:latest
    environment:
    ZOOKEEPER_CLIENT_PORT: 2181
    ZOOKEEPER_TICK_TIME: 2000

kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
    - zookeeper
    ports:
    - 9092:9092
    environment:
    KAFKA_BROKER_ID: 1
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_Host://localhost:9092
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_Host:PLAINTEXT
    KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

email-service:
  build: ./email-service
  environment:
   SPRING_KAFKA_BOOTSTRAPSERVERS: kafka:29092
  ports:
   - "8081:8081"
  depends_on:
   - kafka

advertised.listeners : les auditeurs à publier dans ZooKeeper à l'usage des clients, s'ils sont différents de la propriété de configuration des écouteurs. Dans les environnements IaaS, il peut être nécessaire que cette interface diffère de l'interface à laquelle le courtier est lié. Si ceci n'est pas défini, la valeur pour les écouteurs sera utilisée. Contrairement aux écouteurs, il n'est pas valide d'annoncer la méta-adresse 0.0.0.0.

Veuillez noter que KAFKA_ADVERTISED_Host_NAME est obsolète et il est recommandé d’utiliser KAFKA_ADVERTISED_LISTENERS au lieu. Pour plus d'informations sur KAFKA_ADVERTISED_LISTENERS vérifier ici .

9
lloiacono

[contexte]

J'essaie de lancer un docker avec un kafka client utilisant le registre de https://github.com/wurstmeister/kafka-docker j'essaie de courir un très simple kafka cluster avec un seul courtier et 3 sujets avec chaque 1 partition et un facteur de réplication de 1.

ce très bon lien explique la connectivité pour un cluster kafka avec un courtier, un cluster kafka avec plusieurs courtiers) ainsi que des notions sur les écouteurs, tous utilisant docker, veuillez un coup d'oeil: https://github.com/wurstmeister/kafka-docker/wiki/Connectivity

[résultat]

La première fois que je lance docker-compose up --force-recreate --build, Tout se passe bien!
Les sujets sont créés automatiquement à l'aide de KAFKA_CREATE_TOPICS Et je peux utiliser kafka). Le producteur et le consommateur me conviennent parfaitement.

list topic:bin/kafka-topics.sh --list --bootstrap-server localhost:9092
producteur:bin/kafka-console-producer.sh --broker-list localhost:9092 --topic productadvisor_sales_dev
consommateur:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic productadvisor_sales_dev --from-beginning

Après cela, chaque fois que je fais docker-compose stop, Puis relancez avec docker-compose up --force-recreate --build Et essayez de produire des données, le message d'erreur suivant s'affiche:.

Message d'erreur:[2019-09-23 19:41:33,037] WARN [Producer clientId=console-producer] 1 partitions have leader brokers without a matching listener, including [productadvisor_purchase_dev-0] (org.Apache.kafka.clients.NetworkClient)

[Réponse]

Il semble que vous deviez spécifier la valeur de KAFKA_BROKER_ID (= 1 par exemple) afin que le zookeeper n'essaye pas de créer un nouveau courtier ne pouvant pas avoir d'écouteur, car il est lié à l'ancien.

[Code]


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

  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_Host: localhost
      KAFKA_PORT: 9092
      KAFKA_ADVERTISED_Host_NAME: localhost
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_CREATE_TOPICS: "productadvisor_sales_dev:1:1,productadvisor_stock_dev:1:1,productadvisor_purchase_dev:1:1"
    depends_on:
      - zookeeper
    command: [start-kafka.sh]

[Certains documents]

[~ # ~] nb [~ # ~]

si quelqu'un a plus d'informations sur le fonctionnement interne de kafka, du gardien de zoo et du courtier et pourquoi nous devons le spécifier, pourquoi les informations sont conservées même si je fais un --force-receate --build ... n'hésitez pas . Je suis nouveau sur kafka et ceci est l'un de mes premiers posts complets sur stackoverflow :)

À votre santé !

0
IanMars