假设A topic有3个分区(p0、p1、p2),Spark streaming分配1个Executor,3个CPU。
streaming会在这个Executor上启动3个Task(t0、t1、t2),这3个task会分别消费A topic
上3个分区的数据,然后消费完将offset写到zk上。
假设t1和t2消费的快,而t0很慢。我sparkstreaming是以异步方式消费的,那么这
时Executor上会再启动3个Task(t0、t1、t2),那这3个task很快就消费完了,然后消费完
将offset写到zk上。这时,第一批次的t0也消费完了,那么这时不是会造成offse覆盖?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你好,
1、spark streaming是基于mini batch的;在你的场景只有第一批次的所有task(t0、t1、t2)都运行完了之后,才会去调度第二批次的(t0、t1、t2)task,不会有offset覆盖的问题。
2、至于那个消费慢的t0需要调查原因呢,如果是因为分区t0的数据比较多,spark streaming的receiver可以按照读取的数据条数做切分的。
3、另外你这边的“sparkstreaming是以异步方式消费” 不是太理解