我对Kafka和Spark都很新,并试图写一份工作(Streaming或batch)。我想从Kafka读取预定义数量的消息(比如说x),通过worker处理集合,然后才开始处理下一组x消息。基本上Kafka中的每条消息都是10 KB,我想在一个S3文件中放入2 GB的消息。 那么有没有办法指定接收器提取的消息数量? 我已经读过,我可以用偏移量来指定'在创建DStream时,这个用例有些不同。我需要能够从偏移量'中指定两者。并且'抵消'。
答案 0 :(得分:0)
没有办法将结束偏移设置为初始参数(正如您可以用于起始偏移),但是
您可以使用createDirectStream
(列表中的第四个重载版本),这样您就可以使用HasOffsetRanges
来获取当前微批量的偏移量(它会返回OffsetRange
)。<登记/>
这意味着您必须将从OffsetRange
获得的值与每个微批次中的结束偏移量进行比较,以便了解您的位置以及何时停止从Kafka消费。
我想你还需要考虑每个分区都有顺序偏移的事实。我认为如果你能够完成目前的微批量(可能是几个kB,取决于你的消息的密度),你可能会超过2GB,这是最简单的,以避免分裂最后一批消耗和未消耗的部分,这可能需要你摆弄Spark保留的偏移量,以便跟踪消耗的东西和不消耗的东西。
希望这会有所帮助。