Сервер KSQL подключается к удаленному кластеру Kafka

#apache-kafka #ksqldb

#apache-kafka #ksqldb

Вопрос:

Я использую локальный сервер KSQL (последнюю версию Confluent Platform), пытаясь подключиться к туннелированному кластеру Kafka на моем сервере (AWS). Однако я столкнулся с проблемой невозможности запуска сервера KSQL из-за приведенной ниже ошибки:

 ERROR Failed to initialize TopicClient: Unexpected broker id, expected 5 or empty string, but received ConfigResource(type=BROKER, name='1').name (io.confluent.ksql.services.KafkaTopicClient:279)
ERROR Failed to start KSQL (io.confluent.ksql.rest.server.KsqlServerMain:53)
io.confluent.ksql.util.KsqlException: Could not fetch broker information. KSQL cannot initialize
    at 
io.confluent.ksql.services.KafkaTopicClientImpl.isTopicDeleteEnabled (KafkaTopicClientImpl.java:280)
    at io.confluent.ksql.services.KafkaTopicClientImpl.<init>(KafkaTopicClientImpl.java:66)
    at io.confluent.ksql.services.DefaultServiceContext.create(DefaultServiceContext.java:43)
    at io.confluent.ksql.rest.server.KsqlRestApplication.buildApplication(KsqlRestApplication.java:303)
    at io.confluent.ksql.rest.server.KsqlServerMain.createExecutable(KsqlServerMain.java:85)
    at io.confluent.ksql.rest.server.KsqlServerMain.main(KsqlServerMain.java:50)
Caused by: org.apache.kafka.common.errors.InvalidRequestException: Unexpected broker id, expected 5 or empty string, but received ConfigResource(type=BROKER, name='1').name
  

Мой туннелированный кластер kafka работает на версии 2.0.0. Даже я пытался использовать предыдущую версию KSQL (5.0.x), совместимую с версией Kafka 2.0.x. Однако проблема все еще возникает.

Комментарии:

1. Можете ли вы подключиться к кластеру Kafka со своего локального компьютера, используя другой клиент Kafka, такой как kafkacat , kafka-console-consumer и т.д.?

2.Я думал, что это хорошо работает в моем Java-приложении, однако, похоже, это не так Marking the coordinator stage-0001-kafka-05:9092 (id: 2147483642 rack: null) dead 2019-03-19T11:52:53.968-04:00 INFO [pool-1-thread-2] - (org.apache.kafka.clients.consumer.internals.AbstractCoordinator,common.utils.LogContext$KafkaLogger:341) - [Consumer clientId=consumer-2, groupId=localExecutorGroup] Discovered coordinator stage-0001-kafka-05:9092 (id: 2147483642 rack: null)

3. Если вы не можете подключиться к стандартному клиенту Kafka, то вы также не сможете подключиться к KSQL. Советы по настройке сети см. rmoff.net/2018/08/02/kafka-listeners-explained

4. Я, наконец, все понял. Технически, в кластере Kafka несколько узлов (5 узлов), я создал туннель для подключения к узлу-02, но метаданные возвращают лидер — узел-05. вот почему даже я обновил свой хост-файл / etc / hosts, чтобы сопоставить DNS узла-05 с моим локальным IP, но Kafka возвращает ошибку This server is not the leader for that topic-partition Я исправил это, изменив свой туннель на использование узла-05, поэтому мой туннель также использует leader. Проблема решена. Спасибо за предоставление полезной документации @RobinMoffatt

5. Похоже, вы настраиваете туннель только для одного брокера Kafka. Однако ksqlDB и любой другой клиент Kafka должны иметь возможность взаимодействовать со ВСЕМИ брокерами Kafka.