sparkstreaming消费kafka消息两种方式:
关于两种方式的区别,网上一堆,不写了
KafkaUtils.createStream这种方式,自动管理offset,测试无法通过修改groupid,重新获取所有消息,一次性会把当前kafka中的所有消息全部获取到,不出错,没问题,随便出个异常,例如网络波动,导致所有消息全部丢失,无法再消费,感觉不正常,之前使用springboot的kafka消费,修改groupid可以重新消费
KafkaUtils.createDirectStream直接获取,可手动管理offset,理论上应该可以通过 设置 max.poll.records的值来设置一次最多获取的记录数,但是测试的不行,还是一次性把所有记录数全部拉取过来,修改groupid可以重新消费kafka的数据,而且根据消费是否成功可以选择是否提交offset
一个奇怪的点,两种方式设置kafka的参数,第一种对参数
auto.offset.reset只能设置smallest largest
第二种设置
earliest,latest,none
不知道是不是跟kafka,spark版本有关