【问题标题】:Kafka: Cannot retrieve metadata for topic when changing active controllerKafka:更改活动控制器时无法检索主题的元数据
【发布时间】:2018-01-09 11:54:51
【问题描述】:

我有一个带有集群化 Kafka 服务的 Cloudera 集群。我有两个 Kafka 控制器实例,比如说 C1 和 C2。

当 C1 是活动控制器时,一切似乎都正常。当由于某种原因,C2 成为主动控制器。通过 kafka-console-producer 发送的一些发送消息没有被 kafka-console-consumer 接收(发送的消息中有一半没有被消费者接收,每两条消息一条)。我不确定这是否是由于活动控制器的更改导致无法读取某些分区。

另外,如果我关闭 C1 并且只保持 C2 运行,我还有另一个问题。如果我尝试从 kafka 启动以前工作的 Streamsets 流读取,我会收到错误消息“无法检索主题 XXXX 的元数据”,似乎主题元数据仅存在于 C1 中,在这种情况下处于脱机状态。

如果我在关闭第一个代理后打开 kafka-console-consumer,则会收到以下异常:

WARN [console-consumer-16627_node10.agatha-cluster-1515508696963-2e45e6d8-leader-finder-thread]: 
Failed to find leader for Set(testD-1, testD-0) 
(kafka.consumer.ConsumerFetcherManager$LeaderFinderThread)
kafka.common.KafkaException: fetching topic metadata for topics [Set(testD)] 
from broker [ArrayBuffer(BrokerEndPoint(183,110.250.17.242,9092))] failed

尝试将 kafka 与多个代理一起使用时我做错了什么?

【问题讨论】:

    标签: controller apache-kafka cluster-computing cloudera streamsets


    【解决方案1】:

    我在其中一个代理的以下配置属性的 IP 地址中有错字:advertised.listeners 这导致无法从其他地方访问第二个代理。这导致了两个问题:丢失的消息和获取主题元数据错误

    【讨论】:

      【解决方案2】:

      首先确保两个控制器启动,然后 创建具有分区 2 和复制因子 2 的新主题

      【讨论】:

      • 我测试了它,我得到了相同的结果。这些是我已经完成的步骤: 1. 使用 2 个分区和复制因子 2 使用 2 个代理创建 kafka 主题 2. 检查流集流是否正常工作,可以连接并接收来自主题的数据 3. 关闭活动控制器代理。现在只有第二个代理启动了 4。当我尝试启动流集流时,它失败并出现错误“无法在第二个代理上找到主题元数据”
      • 关闭第一个代理后,我在 kafka-console-consumer 中收到以下异常:从代理 [BrokerEndPoint(183,110.250.17.242) 获取主题 [Set(testD)] 的相关 ID 为 0 的主题元数据,9092)] 失败 (kafka.client.ClientUtils$) java.nio.channels.ClosedChannelException
      • 请检查您的集群中有多少 Zookeeper 已启动。如果您的集群中有 2 个 zookeeper,则必须启动 2 个 zookeeper,如果您的集群中有 3 个 zookeeper,则必须至少启动 2 个 zookeeper。
      • 我已经找到原因了,请看我的回答。感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多