在Akka-Stream中共享消费者,同时保留Kafka的分区重新平衡功能

时间:2017-12-06 14:54:25

标签: scala apache-kafka akka-stream

在我的应用程序中,我们创建了大量的流和大量的消费者(每个流一个)。我试图只为我们所有的流使用一个消费者。我是这样做的:

Consumer
  .committableExternalSource(
    consumer, Subscriptions.assignment(new TopicPartition("topic", 0), group, 50.seconds)
  )

这里的问题是我不想手动分配分区。我希望能够通过消费者,但使用Kafka的自动分区分配。所以我尝试了这种方式:

Consumer
  .plainPartitionedSource(KafkaConfigurations.consumerSettings(group), Subscriptions.topics("topic"))
  .map {
    case (topicPartition, source) =>
      Consumer
        .committableExternalSource(consumer, Subscriptions.assignment(topicPartition), group, 50.seconds)
  }.flatMapMerge(10, identity)

但是,我想我仍然会在使用plainPartitionedSource时为每个来源创建一个消费者,所以,问题是,是否可以使用此方法或类似方法实现,或者我是否#&# 39;我必须为这个用例创建一个不同的(自定义)实现。

0 个答案:

没有答案