【问题标题】:Is it possible to read from multiple partitions using Kafka Simple Consumer?是否可以使用 Kafka Simple Consumer 从多个分区中读取数据?
【发布时间】:2015-01-14 11:56:27
【问题描述】:

是否可以使用 Kafka Simple Consumer 从多个分区中读取数据? 简单消费者在以下情况下使用分区:

PartitionMetadata metadata = findLeader(brokers, port, topic, partition);
SimpleConsumer consumer = new SimpleConsumer(leadBroker, port, 100000, 64 * 1024, clientName);
leadBroker = findNewLeader(leadBroker, topic, partition, port);

https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    SimpleConsumer 的一个实例从单个分区读取。尽管您可以轻松地创建多个 SimpleConsumer 实例并按顺序或并行(从不同线程)读取不同的分区。

    棘手的部分是不同机器上的读取器之间的协调,因此它们不会从同一个分区读取(假设所有消息只需要处理一次)。您需要使用高级消费者或编写类似的自定义代码来完成此操作。

    【讨论】:

    • 为什么这么棘手?散列等都是定制的,不是吗?
    【解决方案2】:

    一个线程只能读取一个分区。要从多个分区读取,您需要生成多个线程,每个线程将从单个分区读取。您必须在不同的线程中运行它,否则您将失去拥有分区的好处并且您的性能会受到影响。

    首先,您可以在一台机器上运行所有消费者。但最终你将不得不开始使用不同的机器进行消费。这时你需要保证一个分区只被处理一次。具体来说,您需要解决的问题是 2 个线程(来自不同的)正试图从同一个分区读取。在任何时候,您都必须只允许一个人处理它。

    此外,您需要管理偏移量。您需要定期在 zookeeper 中刷新它们。

    我建议你使用High Level Consumer。它比 Simple Consumer 更容易使用。它提供了访问同一分区的不同线程之间的协调,并管理自己的偏移量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2019-07-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多