29 | Dataflow(一):正确性、容错和时间窗口
徐文浩
你好,我是徐文浩。
在 Storm 的论文里,我们看到 Storm 巧妙地利用了异或操作,能够追踪消息是否在整个 Topology 中被处理完了,做到了“至少一次(At Least Once)”的消息处理机制。然后,在 Kafka 的论文里,我们又看到了,Kafka 通过将消息处理进度的偏移量记录在 ZooKeeper 中的方法,使得整个消息队列非常容易重放。Kafka 的消息重放机制和 Storm 组合,就使得 At Least Once 的消息处理机制不再是纸上谈兵。
然而,我们并不会满足于“至少一次”的消息处理机制,而是希望能够做到“正好一次(Exactly Once)”的消息处理机制。因为只有“正好一次”的消息处理机制,才能使得我们计算出来的数据结果是真正正确的。而一旦需要真的实现“正好一次”的消息处理机制,系统的“容错能力”就会变得非常重要。Storm 的容错能力虽然比起 S4 已经有了一定的进步,但是实际上仍然非常薄弱。
所有的这些问题,伴随着 Kappa 架构设想的出现,为我们带来了新一代的流式数据处理系统。那么,接下来的几节课里,让我们步入现代流式数据处理系统,一起看看从 Google 的 MillWheel、Dataflow,到开源的 Apache Flink 的系统是怎么回事儿。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
现代流式数据处理系统的关键概念和挑战 本文深入探讨了现代流式数据处理系统中的关键概念和挑战。文章首先强调了实现“正好一次”消息处理机制对数据结果准确性的重要性,并指出了Storm的容错能力相对薄弱的问题。随后,通过一个简单的流式数据处理系统示例,阐述了基于Kafka和Storm构建流式数据处理系统的流程和逻辑。在此过程中,文章详细分析了“正好一次”数据处理的困难性,Storm的容错机制存在的问题以及时间窗口对系统的重要性。此外,文章还探讨了解决重复发送消息的问题,引入BloomFilter进行去重的优化方案。另外,文章还讨论了计算节点迁移的容错问题,强调了状态的重要性以及状态持久化对系统容错和动态扩容的重要性。通过对这些问题的深入讨论,读者能够快速了解现代流式数据处理系统的核心概念和挑战,为进一步深入学习和实践提供了重要指导。 在文章中,还提到了现代流式数据处理系统需要满足三个目标:实现“正好一次”的数据处理机制、持久化计算节点需要使用的“状态”信息以实现真正的容错和在线扩容、内置流式数据处理的时间窗口和触发机制。文章指出,现有的流式处理系统在解决这些问题上存在不足,因此介绍了一些实践上的解决方案,并展望了MillWheel、Dataflow以及Flink等系统可能会做到的事情。 总的来说,本文对现代流式数据处理系统的关键概念和挑战进行了深入剖析,为读者提供了清晰的指导和思路。通过阐述现有系统的不足和未来的发展方向,读者能够更好地理解流式数据处理系统的技术特点和未来发展趋势。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大数据经典论文解读》,新⼈⾸单¥59
《大数据经典论文解读》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 在路上读完streaming 101和streaming 102,我得说这两篇比专栏文章长多了,streaming 101啃完英文版,后来发现知乎上有翻译版,幸福的读完了streaming 102的中文版。这两篇文章很重要,它解释了流式数据处理系统能干嘛?能做和批处理系统一样多的事,甚至超过批处理系统的能力。尤其是第二篇,非常值得一读。它探索了四个问题: 1.【What】流式数据处理系统计算出什么结果?结果由pipeline的转换器决定。转换器好比MapReduce中的Mapper、Reducer函数,Spark中的transform算子。 2.【where】流式数据的结果在哪里计算?流式数据由事件构成,根据事件时间,流式数据可以切分成一个个窗口,把无界数据变成有界数据,计算在窗口中完成。 3.【when】计算结果何时输出?水位线或触发器触发输出。水位线表示属于某个窗口时间范围的事件全部到达,如果需要在水位线之前输出结果,或者水位线之后,还有迟到的事件需要计算,需要触发器的帮助。 4.【How】如果修正计算结果?一个窗口的结果会被计算多次。每次计算结果可以独立地发送到下游,也可以更新之前计算的结果,还可以把之前的结果丢弃,再发送新的结果。2021-12-2320
- 在路上徐老师好,Wikipedia Bloom filter在Probability of false positives一节,给出了漏算日志率的经典估算公式,p=(1 - (1 - 1/m)^kn)^k,其中n为布隆过滤器要处理的日志条数,m为布隆过滤器的bit位数,k为日志映射到布隆过滤器的hash函数个数。 论文《ON THE FALSE-POSITIVE RATE OF BLOOM FILTERS》(2008年)讨论了经典公式在什么情况下有效,m的值要足够大,同时k的值要足够小。论文《A New Analysis of the False-Positive Rate of a Bloom Filter》(2010年)给出了新的估算公式,并讨论了m,以及m/n在不同取值的情况下,经典公式的相对误差。选择合适的n、m、k,才能降低布隆过滤器的假正率。2021-12-165
- 那时刻估算一下 BloomFilter 可能会导致我们漏掉计算多少日志吗。我觉得需要日志总数据 以及 BloomFilter的 false positive的概率。而计算false positive概率需要 BloomFilter 中bit的总数,储存元素的个数,hash函数的个数2021-12-152
- shijiezhiai其实挺好奇论文里提到的unique ID是使用什么算法生成的。因为一个computation可能会被调度到其它的节点上运行。在这个前提下,怎么保证同一条数据生成的ID是相同的呢?2023-02-20归属地:江苏
- 小明我仿佛看到了 我在360三年的时光走马灯2021-12-15
收起评论