所以我需要指定执行器应该如何使用来自 kafka 主题的数据。
假设我有 2 个主题:t0 和 t1 各有两个分区,以及两个执行程序 e0 和 e1(两者都可以在同一个节点上,因此分配策略不起作用,因为在多执行程序节点的情况下,它基于循环法工作调度,无论第一个可用的执行器使用主题分区)
我想要做的是让 e0 从 t0 和 t1 消耗分区 0,而 e1 从 t0 和 t1 消耗分区 1。除了搞乱日程安排之外没有其他办法吗?如果是这样,最好的方法是什么。
这样做的原因是执行程序将写入 cassandra 数据库,并且由于我们将处于并行上下文中,因此一个执行程序可能会与另一个执行程序“冲突”,因此数据将丢失,通过分配我想强制执行程序处理的分区数据依次。
Spark 2.x 支持使用该assign
选项分配分区,更多信息请点击此处。
例子:
Dataset<Row> ds2 = spark
.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "t0,t1")
.option("assign", '{"t0": [0], "t1": [0]}')
.load()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句