本人对kafka和storm理解比较浅显,不对之处敬请见谅
我们都知道,Consumer的配置enable.auto.commit=false设置了以后,offset不会自动提交,需要手动提交。
但是,offset位移是记录当前分区的topic数据已消费到哪一条,不是记录那些记录已经消费过,那些没有消费过。
这里我就有个问题想请教大家:
kafka结合storm使用时,kafkaspout读取数据下发到后续bolt,bolt处理结束ack,kafkaspout commit offset,具体流程大概就是这样。
spout:bolt是1:1时,没问题,但是当这个比例>1时,
topologyBuilder.setSpout("spout", new KafkaSpout(), 1);
topologyBuilder.setBolt("bolt1", new TestBolt(), 3).shuffleGrouping("spout");
如上设置时,一个spout读取到的数据下发到3个bolt中,例如offset分别为1,2,3的数据下发到bolt,
如果说offset为3的数据先处理完,ack后commit,此时offset为3,一旦storm环境因为外在原因终止,
offset1,2的数据就会丢失。
还是其他的一些情况,也会造成数据重复,这些异常情况一般怎么处理??
|
|