web-dev-qa-db-fra.com

Kafka création de sujet: délai d'attente pour l'attribution d'un nœud

J'ai un fichier local kafka s'exécutant à l'aide du fichier docker-compose.yml suivant

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

  kafka:
    image: "confluentinc/cp-enterprise-kafka:5.0.1"
    ports:
      - '9092:9092'
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_Host:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_Host://localhost:9092
      KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 100

Essayer de lancer un sujet de création de base en utilisant kafka-client 2.1.0 dans Scala:

val props = new Properties()
props.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")

val adminClient: AdminClient = AdminClient.create(props)
val newTopic = new NewTopic("test", 1, 1.toShort)
val topicsF = adminClient.createTopics(List(newTopic).asJavaCollection)
val result = topicsF.all().get()

mais après quelque temps, je reçois:

org.Apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.

Je peux créer un sujet en utilisant la ligne de commande:

kafka-topics --create \
    --zookeeper localhost:2181 \
    --replication-factor 1 \
    --partitions 1 \
    --topic test
Created topic "test".

L'API AdminClient de kafka a expiré pour l'attribution d'un nœud décrit un problème similaire avec Java, mais le commentaire suggère qu'un redémarrage du système a corrigé le problème, ce qui n'est pas le cas de mon côté. .

9
Milan

Si vous exécutez Kafka dans Docker (ou similaire), vous devez configurer les écouteurs correctement. Cet article le décrit en détail.

Voici un exemple d'un Docker Compose que vous pouvez utiliser pour accéder à Kafka à partir de votre ordinateur hôte.

Disclaimer: J'ai écrit l'article:)

6
Robin Moffatt

Je pense que le localhost est le problème. Dans votre bootstrap-servers _ propriétés utilisent l'hôte publié (192.168.99.100) que vous avez défini dans votre fichier de composition, au lieu de localhost, cela devrait fonctionner.

0
Bitswazsky