Apache kafka samza任务如何使用多个kafka分区流
我有一个典型的samza任务,它使用两个主题:Apache kafka samza任务如何使用多个kafka分区流,apache-kafka,partition,apache-samza,Apache Kafka,Partition,Apache Samza,我有一个典型的samza任务,它使用两个主题:data和config,并将来自config的消息作为本地状态存储在rocksdb中,以检查来自data的消息是否正常 如果这两个主题中的每个主题只有一个分区,则此任务可以正常工作。一旦我将数据分割成十个分区,而配置仍然是一个分区,事情就变了。默认情况下,samza创建十个任务来使用数据的分区0~9主题,只有任务0使用config主题: 任务[0]->配置,数据[0] 任务[1]->数据[1] ... 任务[9]->数据[9] 似乎每个任务都是用
data
和config
,并将来自config
的消息作为本地状态存储在rocksdb中,以检查来自data
的消息是否正常
如果这两个主题中的每个主题只有一个分区,则此任务可以正常工作。一旦我将数据
分割成十个分区,而配置
仍然是一个分区,事情就变了。默认情况下,samza创建十个任务来使用数据的分区0~9
主题,只有任务0使用config
主题:
任务[0]->配置,数据[0]
任务[1]->数据[1]
...
任务[9]->数据[9]
似乎每个任务都是用自己的rocksdb实例初始化的,因此只有任务[0]在其rocksdb实例中存储所有配置数据,任务[1~9]没有配置数据,因此无法找到传入数据的配置信息
我所期望的是,每个任务都使用来自其数据分区和配置流的消息,如下所示:
任务[0]->配置,数据[0]
任务[1]->配置,数据[1]
...
任务[9]->配置,数据[9]
有什么方法可以实现这一点吗?输入流分区的分布由使用“job.systemstreampartition.grouper.factor”配置的可插入grouper管理。默认情况下,此类跨任务实例对传入流分区进行分组。默认情况下,我相信它会执行GroupByPartitionId。这就是为什么您在任务[0]中看到数据[0]和配置[0] 您可以实现自定义SSPGrouper。然而,您需要的是将“数据”流视为常规输入流,将“配置”流视为“广播””输入流。广播意味着Samza作业中的每个任务都从该流的分区读取。这样,每个任务实例都可以用配置流的数据填充其本地rocksdb。您可以将广播流配置为:
task.broadcast.inputs=.#[],.#[]
对于您的情况,您可以配置:
task.inputs=.data
task.broadcast.inputs=.config#0
签出输入流分区的分布由使用“job.systemstreampartition.grouper.factor”配置的可插入grouper管理。默认情况下,此类跨任务实例对传入流分区进行分组。默认情况下,我相信它会执行GroupByPartitionId。这就是为什么您在任务[0]中看到数据[0]和配置[0] 您可以实现自定义SSPGrouper。然而,您需要的是将“数据”流视为常规输入流,将“配置”流视为“广播””输入流。广播意味着Samza作业中的每个任务都从该流的分区读取。这样,每个任务实例都可以用配置流的数据填充其本地rocksdb。您可以将广播流配置为:
task.broadcast.inputs=.#[],.#[]
对于您的情况,您可以配置:
task.inputs=.data
task.broadcast.inputs=.config#0
检查根据@NavinaRamesh的建议,我遇到了一个异常:
线程“main”java.lang.IllegalArgumentException中的异常:kafka.config#[0]中的格式不正确。广播流名称的格式应为“system.stream#partitionId”或“system.stream#[partitionN partitionM]”
,这意味着正确的格式应为task.Broadcast.inputs=.config#0
,在我更改为正确的格式后,一切都像一个魔咒一样工作。谢谢,干杯,@NavinaRamesh:)很高兴你能弄明白:)我在回复中修正了配置格式。谢谢根据@NavinaRamesh的建议,我遇到了一个异常:线程“main”java.lang.IllegalArgumentException中的异常:kafka.config#[0]中的格式不正确。广播流名称的格式应为“system.stream#partitionId”或“system.stream#[partitionN partitionM]”
,这意味着正确的格式应为task.Broadcast.inputs=.config#0
,在我更改为正确的格式后,一切都像一个魔咒一样工作。谢谢,干杯,@NavinaRamesh:)很高兴你能弄明白:)我在回复中修正了配置格式。谢谢