首页 文章

是否可以使用Kafka Simple Consumer从多个分区读取?

提问于
浏览
4

是否可以使用Kafka Simple Consumer从多个分区读取? 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

2 回答

  • 1

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

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

  • 2

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

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

    此外,您还需要管理抵消 . 您需要定期在zookeeper中刷新它们 .

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

相关问题