数据处理是整个平台中比较复杂,也是各种流派争夺比较激烈的部分。最典型的做法是使用两套计算引擎来分别支持批处理和流处理,与数据获取部分一致。这样做的好处是可以针对业务场景选择最合适的技术,且更能发挥框架本身的特长。绝大多数公司都是以批处理需求为主的,那样的话在一开始也就没有必要引入流处理引擎了。
批处理方面最流行的框架莫过于 Apache Spark,作为一个老牌开源项目,社区活跃,发展阶段较为成熟,功能上也非常全面强大,除了典型的结构化数据处理外,也能支持非结构化数据,图数据等。如果是以结构化数据为主,那么老牌的 Hive,以及 Presto,Dremio 等新晋力量也是非常不错的 SQL 计算引擎选择。在做海量数据的批处理时,也会涉及到不少优化手段,如各种 join 方式的选择,任务并行度的调整,数据倾斜的处理等,这里就不具体展开了。
流处理方面国内听到最多的肯定是 Apache Flink 了。此外像 Spark Streaming,Kafka Streams 也都提供了相应的流处理能力。对于一些复杂计算逻辑,流式计算上的开发门槛还是相当高的,而很多需求其实不一定要在流处理中做复杂计算也能实现。例如我们可以把数据简单处理后实时写入到实时分析型数据库,如 ClickHouse,Pinot,Rockset,或者像 ElasticSearch,KV 存储,in-memory DB 之类的系统中,也能提供流式计算一大部分的需求满足,后面我们会介绍相应例子。流式处理也跟批处理一样,需要做各种性能,扩展性的优化工作,比如指定分区逻辑,解决数据倾斜,checkpoint 调优等。
最近几年流批一体的概念也比较火,尤其是 Flink 社区,认为批处理只是流处理的一种特殊形式,完全可以使用统一的框架来完成。这跟前面提到的 Kappa 架构差不多是一个意思。当然也有从软件层面来做统一的尝试,例如 Apache Beam,可以使用相同的 DSL 来做开发,底层执行时再转换到 Spark 或者 Flink 上分别执行批处理和流处理。
对于数据处理组件,需要满足的要求有:
批处理产品除了前面提到的各种开源框架,云厂商也有提供各种 managed service,包括我们耳熟能详的 AWS EMR,Google Dataproc 或 Cloud Dataflow(基于 Beam),Azure Databricks 等。
流处理产品包括云厂商提供的 AWS Kinesis Data Analytics,Google Cloud Dataflow,Azure Stream Analytics。此外也有一些知名的 SaaS 厂商,包括 Kafka 的“官方”公司 Confluent,Upsolver,Materialize 等。
(文章来源于网络,如侵删)
相关链接:
聊聊云原生大数据平台(一)——数据平台架构 https://www.dtstack.com/bbs/article/428
聊聊云原生大数据平台(二)——数据获取 https://www.dtstack.com/bbs/article/469
聊聊云原生大数据平台(三)——数据存储 https://www.dtstack.com/bbs/article/470
聊聊云原生大数据平台(四)——数据处理 https://www.dtstack.com/bbs/article/471
聊聊云原生大数据平台(五)——元数据 https://www.dtstack.com/bbs/article/472
聊聊云原生大数据平台(六)——数据消费 https://www.dtstack.com/bbs/article/473
聊聊云原生大数据平台(七)——流程编排与 ETL https://www.dtstack.com/bbs/article/474
聊聊云原生大数据平台(八)——数仓最佳实践 https://www.dtstack.com/bbs/article/475
聊聊云原生大数据平台(九)——大数据平台建设 https://www.dtstack.com/bbs/article/476
袋鼠云在大数据领域深耕7年,拥有丰富的大数据平台建设经验和成熟的产品体系,想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack