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
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 .
[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é !