【问题标题】:Consumer connecting to zookeeper not broker for message consumption?消费者连接到zookeeper而不是消息消费代理?
【发布时间】:2017-12-14 23:19:46
【问题描述】:

Kafka tutoria查看此文档

Zookeper 在 2181 端口启动 Broker/Kafka 从 9092 开始

启动生产者发送消息

    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic Hello-Kafka // producer is producing directly to broker not zookeeper which is correct

启动消费者接收消息

    bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic Hello-Kafka --from-beginning

据我了解,消费者直接从代理消费消息,但在上面的消费者命令中,我们没有提到代理,而只提到了 zookeeper。将要 消费者连接到 Zookeeper(而不是代理)来消费消息?

【问题讨论】:

    标签: java apache-kafka


    【解决方案1】:

    有一个旧的 Kafka 消费者(0.8.2 及更早版本)和一个新的 Kafka 消费者(0.9 及更高版本)。有关新消费者如何工作的详细说明,请参阅此处的原始公告博客

    https://www.confluent.io/blog/tutorial-getting-started-with-the-new-apache-kafka-0-9-consumer-client/

    旧的消费者会连接到 zookeeper,但仍会从 Kafka 获取所有消息。

    新的消费者没有zookeeper依赖,根本不连接zookeeper。

    console-producer 和 console-consumer 支持旧的和新的 api,具体取决于您提供的选项。您提供的示例控制台消费者是旧消费者,因为它指定了 --zookeeper 而不是 --bootstrap-server

    【讨论】:

    • 我从https://kafka.apache.org/downloads安装了最新的kafka,即kafka-0.11.0.0-src。作为第一步,我正在尝试启动 Zookeeper 服务器。我正在使用与上述 kafka 下载捆绑在一起的 zookeeper。我导航到<Kafka_Dir>\bin\windows 并执行了这个命令zookeeper-server-start.bat ..\..\config\zookeeper.properties 但它说The syntax of the command is incorrect.Classpath is empty. Please build the project first e.g. by running gradlew jarAll 我不确定我在这里缺少什么?
    • 您下载了源代码。你想下载二进制版本,这样它就可以运行了。由于您使用的 Windows 没有得到很好的支持,因此我建议您使用 docker 映像。完整的快速入门在这里docs.confluent.io/current/cp-docker-images/docs/quickstart.html
    • 感谢二进制下载成功。我执行了以下消费者命令kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning 它说Missing required argument [zookeeper]。甚至 kafka 最新版本的消费者都在期待 zookeeper 吗?
    • 对我有用,不需要。尝试明确设置 --new-consumer 这应该是默认值。您的 CLASSPATH 中可能有一些旧版本的 Kafka。运行不带参数的 kafka-console-consumer.bat 应该打印所有选项
    • 能否请您对我在stackoverflow.com/questions/44621198/… 下的最后一条评论进行说明?
    【解决方案2】:

    你使用的 --zookeeper 参数是旧的消费者。新的 Kafka 消费者(您应该使用它)直接连接到 Kafka 代理。为此,您可以使用 --bootstrap-server 选项而不是 --zookeeper 指定 localhost:9092。新的消费者不再在 Zookeeper 上保存偏移量,而是在 Kafka 代理上保存到名为 __consumer_offsets 的特定主题。

    【讨论】:

    • 所以,替换 (OLD) 命令 bin/kafka-console-consumer.sh --zookeeper localhost:2181 —topic Hello-Kafka --from-beginning (NEW) bin/kafka- console-consumer.sh --broker-server localhost:9082 --topic Hello-Kafka --from-beginning (端口号也有变化!起初错过了)。我们还需要安装zookeeper吗?
    【解决方案3】:

    消费者订阅主题并连接到zookeeper。Kafka服务器通过Zookeeper集群共享信息。 Kafka 将基本元数据存储在 Zookeeper 中,例如有关主题、代理、消费者偏移量(队列读取器)等的信息。为了更好地了解 Zookeeper 的角色,请查看以下链接。

    https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka

    【讨论】:

    • 消费者偏移量现在存储在 Kafka 中,而不是 zookeeper。只有旧的消费者 0.8 或更早版本在 zookeeper 中存储偏移量
    猜你喜欢
    • 2021-03-06
    • 2017-03-19
    • 2016-05-04
    • 2018-08-25
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 2017-09-23
    相关资源
    最近更新 更多