我对kafka和spark都很陌生,正在尝试写一个作业(流式或批式)。我想从kafka那里读一个预定义的消息数(比如x),通过workers处理收集,然后只开始处理下一组x消息。基本上,kafka中的每条消息都是10kb,我想在一个s3文件中放入2gb的消息。那么,有没有办法指定接收者获取的消息数量呢?我已经读到在创建dstream时可以指定'from offset',但是这个用例有些不同。我需要能够同时指定“从偏移量”和“到偏移量”。
我对kafka和spark都很陌生,正在尝试写一个作业(流式或批式)。我想从kafka那里读一个预定义的消息数(比如x),通过workers处理收集,然后只开始处理下一组x消息。基本上,kafka中的每条消息都是10kb,我想在一个s3文件中放入2gb的消息。那么,有没有办法指定接收者获取的消息数量呢?我已经读到在创建dstream时可以指定'from offset',但是这个用例有些不同。我需要能够同时指定“从偏移量”和“到偏移量”。
1条答案
按热度按时间kt06eoxx1#
无法将结束偏移量设置为初始参数(就像可以设置开始偏移量一样),但可以使用
createDirectStream
(清单中的第四个重载版本),它使您能够使用HasOffsetRanges
(这给了你回报OffsetRange
).这意味着您必须比较从
OffsetRange
在每一个小批量中都有你的结束偏移量,以便知道你在哪里,什么时候停止Kafka的消费。我想您还需要考虑一个事实,即每个分区都有其顺序偏移量。我想如果你能稍微超过2gb,完成当前的微批处理(可能是几kb,这取决于你的消息密度)所需的数据量,这将是最简单的,以避免将最后一批处理拆分为已消耗和未消耗的部分,这可能需要你摆弄spark保持的偏移量,以便跟踪消耗了什么和没有消耗什么。
希望这有帮助。