Spark小课堂Week2 Hello Streaming
Spark小课堂Week2 Hello Streaming
我们是怎么进行数据处理的?
- 批量方式处理
目前最常采用的是批量方式处理,指非工作时间运行,定时或者事件触发。这种方式的好处是逻辑简单,不影响联机业务,但是性能不行。
- 理想方式
对于数据处理的问题,我们的最终理想解,应该是满足业务规则正确的情况下,实时的完成处理。
- 平衡点
理想方式难度比较高,批量方式往往又不给力,我们可以在批量方式和理想方式中间,找到一个平衡点,就是流处理。
流处理
我们的理想情况是当不断有数据进来,就不断的进行处理。
这样处理未必是效率最优,所以我们可以抽象出一个Batch的概念,Batch是指以某种方式切分出了的一块块的数据。
流处理是基于Batch来处理的,而在SparkStreaming中切分Batch的依据是时间。
Batch变大,计算成本会降低,但是延时会提高,所以在流处理中有一个核心问题是需要选择最合适的Batch粒度,目标是整体的处理时间最优。
相比于批量处理,流处理下我们会碰到一些问题:
- 由于持续不断的进行处理,可能会出现瞬时流量过大的情况。
- 涉及到多个环节,环节之间可能会丢失数据。
- 因为工作时间变长,服务程序异常产生的风险也变大。
这些问题都是通过分布式技术来解决的。
所以在实际应用中,流处理一定是分布式的,从批量处理进行改造会分为下面两个步骤:
- 将每个环节的处理分布式。
- 将整块的流处理切分为非常多小块的处理。
问题:
- 我想知道流处理追求快速的代价是什么?
相比于批量处理方式,流处理可靠性会降低,并且对于算法有一定的抽象难度,所以设计和开发复杂度会提高,增加的是智力成本。
- 想知道:spark streaming 是否在计算和流数据接收上都是分布式的?
Streaming实际是包含了两个流式处理,一个是持续不断的接收数据,一个把接收完的数据持续不断的进行处理,其中接收数据采用的是主从模式,不是分布式的,只有处理数据是分布式的。
- spark平台可以处理非结构化数据和结构化数据的时候有什么不同的机制吗?配置平台上需要做什么变动?
Steaming目前在业界也已经被大量使用在非结构化的处理场景下,因为从Streaming中的数据就是对象,本身是数据无关的,对于非结构化数据,只要序列化成对象就可以处理。
关于
小课堂是在公司进行内部交流的一系列主题,偏基础,但是比较零散,持续更新中。