1、張迎/實時計算平臺負責人作業幫基于作業幫基于FlinkFlink的實時計算平臺實踐的實時計算平臺實踐發展歷程發展歷程Flink SQL應用實踐平臺建設總結展望#1#1#2#2#3#3#4#4整體架構數據庫業務側日志KafkamysqlApp,web,后端業務側CanalFuxi實時離線實時計算Flink離線計算SparkStreaming/MRStarRocksDorisHologresESHive產品化BI分析工作臺實時計算歷程輔導老師:輔導老師:出勤、作答出勤、作答2019少量 Spark Streaming主講主講2019.9 11新增10+Spark StreamingFlink JA
2、R計算平臺實時數倉實時數倉2020FlinkSQL(1.9.1)計算平臺計算平臺2020.11全部業務線全部業務線多云、多集群多云、多集群2021.11發展歷程FlinkFlink SQLSQL應用實踐應用實踐平臺建設總結展望#1#1#2#2#3#3#4#4Kafka數據流架構binloglogTableSQL JobSQL JobSQL JobTableTableTableTableTableSQL JobSQL JobTableTableEnd-To-End Monitor Trace任務管理任務管理、元數據元數據、血緣關系、權限管理、血緣關系、權限管理OLAP/MQ在 SQL 任務里支持
3、Trace存儲選型以及結合FlinkSQL 的應用提高人效SQL21Table12AutoFrameAutoAutoTopicTopicTopicmetricstrace在線服務函數因此,考慮方便的給視圖增加日志問題線上任務:視圖多,case定位困難解決思路實時SQL任務視圖不應太長以提高可讀性支持復用不應太長以提高可讀性支持復用打印日志方便定位SQL Why Trace?Table-DataStreamSQLSQLDAGDAG帶來的問題:帶來的問題:Trace,天然的多下游寫入場景源表讀取2次foo調用3次StatementSetRefs:1.1.11 StatementSet2.1.14
4、attachAsDataStreamTraceTrace 優化前DAGStatementSet解決效果解決效果l 源表讀取1次l foo調用1次TransformationsTransformationsExecEnvTableEnvmerge intoStreamGraphgenerateexecute優化后的DAGDAG合并方案Trace 優化后DAG解決效果解決效果l 源表讀取1次l foo調用1次TransformationsTransformationsExecEnvTableEnvmerge intoStreamGraphgenerateexecute優化后的DAGDAG合并方案T
5、race 優化后DAG如何使用如何使用l 一條語句增加視圖trace:prepare_data.trace.fields=f0,f1TableTableSQL JobSQL JobTableTable事實流JOINJOIN ON f0JOIN ON f112Table 需求分析12Table需求一:多索引:f0、f1需求二:更新信息觸發下游user_idlesson_idis_attend11231212303231141231VALUE=serialize()lesson_id123231setVALUE多索引RedisRedis Connector的優點1.高QPS、低延遲2.TTL3.存
6、儲大小可控4.貼合計算模型注:索引一般不會修改,因此更新沒有讀操作Table 解決方案KEYKEY=(user_id,lesson_id)stringuser_idlesson_idis_attend11231212303231141231VALUE=serialize()lesson_id123231setVALUE多索引Rediskafkakafka更新消息:順序性完整性Redis Connector的優點更新觸發1.高QPS、低延遲2.TTL3.存儲大小可控4.貼合計算模型注:索引一般不會修改,因此更新沒有讀操作Table 解決方案KEYKEY=(user_id,lesson_id)st
7、ringTable的DDLTableSQL JobSQL JobTableJOIN ON user_id,lesson_idJOIN ON lesson_id補充某個學生是否到課補充某節課到課學生TableTable 效果12定義多索引定義更新消息Kafka表發展歷程Flink SQL應用實踐平臺建設平臺建設總結展望#1#1#2#2#3#3#4#4平臺建設實時計算平實時計算平臺臺集群環境PerJob/Application云廠商客戶端版本、配置元數據語義檢測版本控制調試SQL結構圖狀態管理/恢復權限審批實時任務流程管理統一易用規范監控、報警日志收集實時任務研發流程管理監控、報警why-實時任務
8、流程管理記不清不規范找不到瞎修改線上實時任務運行了一年,最初的需求逐漸記不清代碼沒有遵守規范,可讀性差存在運行中的任務Jar找不到對應的代碼周末任務報警,原因是私自修改了線上SQL問題解決方案需求管理CR集群編譯審批實時任務研發規范實時任務研發流程規范RDPMS 平臺實時計算平臺UDF quickstartarchetype編寫SQL/代碼Code ReviewGit需求卡片編譯提測發單上線創建/更新作業審批部署作業Check開發需求管理、編譯上線易用-監控問題Flink JobContainerContainerPrometheuspull metricsAlarm Service1.Kaf
9、ka 延遲2.CheckPoint失敗3.12問題一:PrometheusReport服務發現Container 啟動/注銷,Prometheus 不能動態感知.問題二:Kafka 延遲報警Flink Metrics 沒有包含KafkaConsumer.records-lag 延遲指標,在任務平臺配置延遲報警,相比額外工具/服務更加方便易用-監控問題Flink JobContainerContainerPrometheuspull metricsregisterPrometheusReporter-DiscoveryZooKeeperdiscover targetsKafkaConnector12效果圖需求一的解決方案:PrometheusReporter-DiscoveryHTTPServer 啟動后,注冊 ip:port 臨時節點到 zk,Prometheus 監測 znode 下節點變化1需求二的解決方案:Kafka 延遲報警1.poll 之后注冊 records-lag metrics 確??梢?.打平不同 Kafka 版本的 metrics diffephemeral#4 4總結展望總結展望總結與展望感悟與思考簡化開發的同時需要考慮運維成本下一步規劃成本和時效性的平衡靈活升級作業 Flink 版本適配現狀,同時追求存儲的多樣化探索流批一體