【问题标题】:Running Zookeeper with Multiple Partitions Kafka - Java运行具有多个分区 Kafka 的 Zookeeper - Java
【发布时间】:2017-12-05 13:37:03
【问题描述】:

我正在尝试使用 Java API 运行 zookeeper,以便能够启动具有多个分区的主题。我相信this answer 可以解决问题。但是,当我尝试运行此代码时,出现错误:

无法连接到 Zookeeper 服务器“localhost:2181”,超时时间为 8000 毫秒

在这台机器上,我没有运行 zookeeper 服务器。但我想用 Java 启动一个实例(我目前可以使用 ZooKeeperServerMain() 类来实现)。所以也许我需要做同样的事情,但以某种方式将它与包含向主题添加多个分区的可能性的第一个答案结合起来。

不管怎样,我可以使用this answer 启动zookeeper,但这只会为一个主题创建一个分区,这不是我想要的。

本质上,我想启动 Zookeeper(我可以使用第二个链接来做),在本地启动 Kafka(我也可以做),启动一个生产者,它产生一个主题但三个不同的分区,以及 3 个不同的消费者,它们将读取消息,每个分区一个(如果我正确理解 Kafka,如果启动 3 个消费者,3 个分区将被平均分配)。所有这些都是使用 Java API 完成的(我没有运行 Kafka 脚本或任何东西)。但是,我很难创建一个包含三个分区的主题,这是我的问题。

【问题讨论】:

  • 你是如何创建主题的?你在运行生产者/消费者之前创建它吗?还是生产者/消费者自动创建的?
  • @vahid,如果我不使用 Zookeeper 类(这是我目前正在做的),主题是由生产者使用自动创建的: producer.send(new ProducerRecord(topic, key, message)。但是,正如我最初的问题所暗示的那样,这只会为主题创建一个分区,但我想在同一个主题中创建 3 个分区。
  • 是否可以在代理配置中使用num.partitions=3 运行您的代理?此配置的默认值为 1,这就是为什么您最终只为自动创建的主题创建了一个分区。
  • 如何/在哪里可以指定代理配置中的分区数?
  • 您目前如何运行您的 Kafka 代理?

标签: java maven localhost apache-kafka


【解决方案1】:

代理的num.partitions 配置可用于强制自动创建主题(由生产者或消费者创建)的分区数。要使此配置生效,需要先删除已创建的主题。只有自动创建的主题(更改此配置后)才会受到影响。

【讨论】:

    【解决方案2】:

    今后,您不应直接与 zookeeper 交谈以在 Kafka 中创建或管理主题。您应该使用 Kafka 0.11 中引入的新 AdminClient API。

    https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 2015-07-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 2017-04-01
      • 1970-01-01
      • 2018-06-17
      相关资源
      最近更新 更多