从主题中的特定分区流式传输(Kafka Streams)

时间:2017-06-20 15:42:39

标签: apache-kafka apache-kafka-streams

据我所知,在阅读Kafka Streams文档后,无法将其用于仅从给定主题的一个分区流式传输数据,因此总是必须全部阅读。

这是对的吗?

如果是这样,是否有计划在未来向API提供此类选项?

4 个答案:

答案 0 :(得分:3)

否则您无法做到这一点,因为内部消费者订阅了加入通过application-id指定的使用者组的主题,因此会自动分配分区。 顺便问一下你为什么要那样做? 如果不重新平衡,您将失去Kafka Stream提供的可扩展性功能,因为只需添加/删除流应用程序的实例,您就可以扩展整个过程,这要归功于对分区的重新平衡。

答案 1 :(得分:3)

您可以使用PartitionGrouper执行与您的需求类似的操作。分区分组器可用于基于给定的主题分区创建流任务。

例如,请参阅DefaultPartitionGrouper实现。但它需要定制。

因此,正如@ppatierno建议的那样,请查看您的用例,然后以不必偏离标准做法的方式设计拓扑。

答案 2 :(得分:1)

您可以通过正确指定主题,分区编号和偏移

来完成此操作
 Map(new TopicPartition(topic, partition) -> 2L)
    val stream = KafkaUtils.createDirectStream[String, String](
          ssc,
          PreferConsistent,
          Subscribe[String, String](topics, kafkaParams,offsets))

其中partition是指分区号,

2L指的是分区的起始偏移量

有关详细信息,请参阅streaming_from_specific_partiton

答案 3 :(得分:0)

您无法在Kafka使用者中指定分区,因为这就是Kafka缩放的原因。或者我们可以这样说,只有分布式系统可以工作。您可以进行细分,并将每个细分分配给一个主题,并且每个主题应该只有一个分区。

由于主题已在ZooKeeper中注册,因此,如果尝试添加过多主题,则可能会遇到问题。如果您有100万用户,并决定为每个用户创建一个主题。