这是Facebook在FlinkForward2021上的一个talk, 主题如下



在前面的论文中分析了Facebook的实时计算引擎的设计和选型的考量,里面提到了Facebook的实时计算引擎为了满足易用性和性能不同维度的需求,研发了多套实时计算系统如Puma``Stylus``Swift分别使用SQL,C++,Swift来进行研发。但是多套引擎也带来了很多问题,可选择的引擎太多,不同的引擎的功能重叠,对用户和对于引擎维度都有很大的成本。为了能让用户获得一致性的体验,其内部选择将多套引擎整合成一套也就是XStream。



XStream架构分层



他有以下的一些特点

  1. 基于Stylus的一个Native C++的执行引擎
  2. 基于统一的SQL语言,统一的流,批,交互式的查询语言
  3. 使用解释执行而不是编译执行的模式
  4. 和presto/spark 共享使用了向量化的SQL执行引擎





SQL上使用标准的SQL2016的语法和Presto统一,并且做了Multi-tumble 和 Mulit-slide window的拓展工作



编译执行的方式就是根据SQL生成的AST tree进行codegen,然后进行编译执行。编译执行的坏处主要是

  • 每个pipeline都会生成一个binary文件
  • scale up down不友好
  • 依赖问题
  • 编译时间较长



最终他们采用的是解释执行的模式。由C++ worker解释执行,一个作业只有一个binary,但是解释执行的效率肯定没有编译执行的效率高,因此他们使用了以下手段来提速

  • 使用列式存储+向量化处理模式
  • 利用simd指令加速



向量化提速用到了最近新起的velox的项目,它是一个C++向量化的SQL执行引擎,由Facebook开源,并在其内部用于Presto和Spark以及XStream的统一的运行时向量化加速,velox相关的可以参看这篇文章 Velox: 现代化的向量化执行引擎



整体的XStream架构,提供CoreSQL和DataFrame两套api,编译成LogicalPlan和Physical Plan。然后分发到local worker进行处理。Local planner将其翻译成XStream operator, 然后利用Velox 来进行加速处理



Velox和XStream 编译型和解释型的对比数据

参考

https://www.youtube.com/watch?v=DNI54vc1ALQ&t=1158s&ab_channel=FlinkForward

XStream: Stream Processing Platform at Facebook的更多相关文章

  1. 腾讯大数据平台Oceanus: A one-stop platform for real time stream processing powered by Apache Flink

    January 25, 2019Use Cases, Apache Flink The Big Data Team at Tencent     In recent years, the increa ...

  2. Stream Processing 101: From SQL to Streaming SQL in 10 Minutes

    转自:https://wso2.com/library/articles/2018/02/stream-processing-101-from-sql-to-streaming-sql-in-ten- ...

  3. Stream processing with Apache Flink and Minio

    转自:https://blog.minio.io/stream-processing-with-apache-flink-and-minio-10da85590787 Modern technolog ...

  4. Storm(2) - Log Stream Processing

    Introduction This chapter will present an implementation recipe for an enterprise log storage and a ...

  5. Akka(23): Stream:自定义流构件功能-Custom defined stream processing stages

    从总体上看:akka-stream是由数据源头Source,流通节点Flow和数据流终点Sink三个框架性的流构件(stream components)组成的.这其中:Source和Sink是stre ...

  6. Apache Samza - Reliable Stream Processing atop Apache Kafka and Hadoop YARN

    http://engineering.linkedin.com/data-streams/apache-samza-linkedins-real-time-stream-processing-fram ...

  7. 13 Stream Processing Patterns for building Streaming and Realtime Applications

    原文:https://iwringer.wordpress.com/2015/08/03/patterns-for-streaming-realtime-analytics/ Introduction ...

  8. 1.2 Use Cases中 Stream Processing官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Stream Processing 流处理 Many users of Kafka ...

  9. 1.1 Introduction中 Kafka for Stream Processing官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka for Stream Processing kafka的流处理 It i ...

随机推荐

  1. POJ2115C Looooops

    http://poj.org/problem?id=2115 k位储存特点,一旦溢出,那么就到第二个循环开始返回0重新计数.问题实际转化成a+cx=b(mod 2^k)跑多少圈能够重合.因为是k位无符 ...

  2. Typora+PicGo-Core实现图片自动上传gitee图床

    说明: 使用gitee作为图床: 客户机为Mac M1: Typora版本:1.0.2 (5990). gitee配置步骤 需要拥有一个gitee账号,创建一个公有仓库用于存储图片,然后需要生成一个t ...

  3. hisql orm 框架insert数据写入教程

    hisql.net 官网(文档编写中) HiSql 源码(github) https://github.com/tansar/HiSql git clone https://github.com/ta ...

  4. MCU软件最佳实践——矩阵键盘驱动

    1.矩阵键盘vs独立按键 在mcu应用开发过程中,独立按键比较常见,但是在需要的按键数比较多时,使用矩阵键盘则可以减少io占用,提高系统资源利用率.例如,某mcu项目要求有16个按钮,如果采用独立按键 ...

  5. Android一句话 | ViewGroup事件分发

    ViewGroup中可重写的关于事件分发的事件有dispatchTouchEvent,onTouchEvent,onInterceptTouchEvent和requestDisallowInterce ...

  6. 《剑指offer》面试题10- I. 斐波那契数列

    问题描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0,   F(1) = 1 F(N) = F(N - 1) + F(N - ...

  7. linux下git安装使用新手教程。

    1.进入官网,创建Github帐户,获取git服务. 2.本地安装git客户端,yum install git. 3.生成ssh key,使用命令 "ssh-keygen -t rsa -C ...

  8. QMainWindow(一)

    mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MainWindo ...

  9. golang中结构体和结构体指针的内存管理

    p1是结构体,p2是结构体指针. 2. 声明并赋值结构体和结构体指针 package main import "fmt" type Person struct { name str ...

  10. java继承成员函数特点

    1 //成员函数. 2 /* 3 * 当子父类中出现成员函数一模一样的情况,会运行子类的函数. 4 * 这种现象,称为覆盖操作.这时函数在子父类中的特性. 5 * 函数两个特征: 6 * 1,重载. ...