1、金风/小米软件开发工程师 Flink流批一体在小米的实践小米的大数据发展演变流批一体的平台层支持流批一体典型应用场景未来规划#1#2#3#4#1小米的大数据发展演变发展演变201920202019前离线计算为Spark实时计算为SparkStreaming,少部分Storm开始接入使用Flink,广泛运用于搜索推荐,广告实时样本,实时ETL等场景2021开始接入使用FlinkSQL,广泛运用于实时数仓构建,实时ETL作业开始接入数据湖,基于数据湖打造流批一体的解决方案2019现状计算资源存储YarnHiveIcebergHBaseTalosKuduDoris实时离线FlinkSpark Str
2、eamingFlinkSparkHiveFlink JarFlink SQLSparkFlink SQL BatchSpark Jar Spark SQL Hive SQL未来实时离线FlinkSpark StreamingFlinkSparkHiveFlink JarFlink SQLSparkFlink SQL BatchSpark Jar Spark SQL Hive SQLFlink实时离线Flink SQLFlinkFlink SQL流批一体化#2流批一体的平台建设流批一体的平台建设基于metacat构建统一的元数据管理元数据基于ranger构建统一的权限管理权限统一离线作业调度和实
3、时调度调度丰富离线和实时的生态生态统一的元数据管理MetacatHive RDSKuduDorisTalos(小米自研消息队列)FlinkSparkPrestoHive统一的元数据管理SERVICE_CLUSTER .DATABASE .TABLE大多数系统以服务名和集群名作为一级catalog和系统原本的database对应,如果没有database(es,talos(消息队列),则默认使用default和系统原本的table对应,es则是对应索引名,消息队列则对应topic名INSERT INTO iceberg_cluster2.db1.tb1SELECT f1,f2,f3 FROM t
4、alos_cluster1.default.topic1;一条简单的SQL,即可编写一个数据入湖的作业!统一的权限管理RangerHiveIcebergKuduDorisMySQLFlink SQLSQLSource/SinkFieldsRangerAdminPhysicalPlanFlink JarTable APIDataStreamSource/Sink TableINSERT INTO iceberg_cluster2.db1.tb1SELECT f1,f2,f3 FROM talos_cluster1.default.topic1;Source:talos_cluster1.defa
5、ult.topic/f1,f2,f3Sink:iceberg_cluster2.db1.tb1/f4,f5,f6 统一的元数据+权限一站式开发体验灵活的权限管理统一离线和实时调度离线调度实时调度批流混合INSERT INTO iceberg_cluster2.db1.tb1SELECT f1,f2,f3 FROM iceberg_cluster1.default.topic1;batch作业,默认全量读取iceberg表,全量读取完之后,作业结束.Streaming作业,默认全量读取iceberg表,并实时消费增量的数据.batch+streaming,先启动一个batch作业,默认全量读取i
6、ceberg表,读完之后batch作业结束.然后启动一个streaming作业,实时消费增量的数据.生态建设Flink 社区HiveIcebergHBaseTalosKuduDorisFlink Bahir其他社区小米内部RedisRocketMQJDBCPegasusElasticSearchFalconOpenTSDBDruidHybridSourceCDC-SINKMySQLCDC生态建设Iceberg批量读写流式入湖增量消费以batch形式读写iceberg支持CDC数据实时写入iceberg增量消费iceberg表,包括v1/v2表社区已支持社区已支持小米内部实现生态建设Hybrid