从主题内的特定分区进行流式处理(kafka流)

mepcadol  于 2021-06-08  发布在  Kafka
关注(0)|答案(4)|浏览(352)

据我所知,在阅读了kafka streams文档之后,不可能只从给定主题的一个分区使用它来流式传输数据,人们总是必须完整地阅读它。
对吗?
如果是的话,将来有没有计划为api提供这样一个选项?

pgky5nke

pgky5nke1#

您可以使用partitiongrouper做一些类似于您需要的事情。分区分组器可用于基于给定的主题分区创建流任务。
例如,请参阅defaultpartitiongrouper实现。但这需要定制。
因此,正如@ppatierno所建议的,请查看您的用例,然后以一种不必偏离标准实践的方式设计拓扑。

izj3ouym

izj3ouym2#

不,您不能这样做,因为内部使用者订阅了加入使用者组的主题,该使用者组是通过应用程序id指定的,因此分区是自动分配的。顺便问一下,你为什么要那样做?如果不重新平衡,您将失去kafka stream提供的可伸缩性功能,因为只要添加/删除流应用程序的示例,您就可以伸缩整个流程,这要归功于分区上的重新平衡。

dw1jzc5e

dw1jzc5e3#

无法在kafka使用者中指定分区,因为这就是kafka缩放的原因。或者我们可以这样说,只有分布式系统才能工作。您可以进行分段并将每个分段分配给一个主题,每个主题应该只有一个分区。
由于主题是在zookeeper中注册的,如果尝试添加太多主题,可能会遇到问题,例如,您有一百万个用户,并且决定为每个用户创建一个主题。

e3bfsja2

e3bfsja24#

您可以通过正确指定主题、分区号和偏移量来实现这一点

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

其中partition是指分区号,
2l为隔板起始偏移量
有关详细信息,请参阅来自特定部分的流媒体。

相关问题