关于Flink:使用-Flink-Hudi-构建流式数据湖

本文介绍了 Flink Hudi 通过流计算对原有基于 mini-batch 的增量计算模型一直优化演进。用户能够通过 Flink SQL 将 CDC 数据实时写入 Hudi 存储,且在行将公布的 0.9 版本 Hudi 原生反对 CDC format。次要内容为: 背景增量 ETL演示一、背景近实时从 2016 年开始,Apache Hudi 社区就开始通过 Hudi 的 UPSERT 能力摸索近实时场景的应用案例 [1]。通过 MR/Spark 的批处理模型,用户能够实现小时级别的数据注入 HDFS/OSS。在纯实时场景,用户通过流计算引擎 Flink + KV/OLAP 存储的架构能够实现端到端的秒级 (5分钟级) 实时剖析。然而在秒级 (5分钟级) 到小时级时的场景还存在大量的用例,咱们称之为 NEAR-REAL-TIME (近实时)。 在实践中有大量的案例都属于近实时的领域: 分钟级别的大屏;各种 BI 剖析 (OLAP);机器学习分钟级别的特征提取。增量计算解决近实时的计划以后是比拟凋谢的。 流解决的时延低,然而 SQL 的 pattern 比拟固定,查问端的能力(索引、ad hoc)欠缺;批处理的数仓能力丰盛然而数据时延大。于是 Hudi 社区提出基于 mini-batch 的增量计算模型: 增量数据集 => 增量计算结果 merge 已存后果 => 外存 这套模型通过湖存储的 snapshot 拉取增量的数据集 (两个 commits 之前的数据集),通过 Spark/Hive 等批处理框架计算增量的后果 (比方简略的 count) 再 merge 到已存后果中。 ...

September 8, 2021 · 7 min · jiezi

关于flink:Flink-114-新特性预览

简介: 一文理解 Flink 1.14 版本新个性及最新进展 本文由社区志愿者陈政羽整顿,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的《Flink 1.14 新个性预览》。次要内容为: 简介流批一体Checkpoint 机制性能与效率Table / SQL / Python API总结 此文章为 8 月 7 日的分享整顿,1.14 版本最新进展采纳正文的形式在文末进行阐明。 一、简介1.14 新版本本来布局有 35 个比拟重要的新个性以及优化工作,目前曾经有 26 个工作实现;5 个工作不确定是否能准时实现;另外 4 个个性因为工夫或者自身设计上的起因,会放到后续版本实现。[1] 1.14 绝对于历届版本来说,囊括的优化和新增性能点其实并不算多。其实通过观察发版的节奏能够发现,通常在 1-2 个大版本后都会公布一个变动略微少一点的版本,次要目标是把一些个性稳定下来。 1.14 版本就是这样一个定位,咱们称之为品质改良和保护的版本。这个版本预计 8 月 16 日进行新个性开发,可能在 9 月份可能和大家正式见面,有趣味能够关注以下链接去跟踪性能公布进度。 Wiki:https://cwiki.apache.org/conf...Jira:https://issues.apache.org/jir...二、流批一体流批一体其实从 Flink 1.9 版本开始就受到继续的关注,它作为社区 RoadMap 的重要组成部分,是大数据实时化必然的趋势。然而另一方面,传统离线的计算需要其实并不会被实时工作齐全取代,而是会长期存在。 在实时和离线的需要同时存在的状态下,以往的流批独立技术计划存在着一些痛点,比方: 须要保护两套零碎,相应的就须要两组开发人员,人力的投入老本很高;另外,两套数据链路解决类似内容带来保护的风险性和冗余;最重要的一点是,如果流批应用的不是同一套数据处理系统,引擎自身差别可能会存在数据口径不统一的问题,从而导致业务数据存在肯定的误差。这种误差对于大数据分析会有比拟大的影响。在这样的背景下,Flink 社区认定了实时离线一体化的技术路线是比拟重要的技术趋势和方向。 Flink 在过来的几个版本中,在流批一体方面做了很多的工作。能够认为 Flink 在引擎层面,API 层面和算子的执行层面上做到了真正的流与批用同一套机制运行。然而在工作具体的执行模式上会有 2 种不同的模式: 对于有限的数据流,对立采纳了流的执行模式。流的执行模式指的是所有计算节点是通过 Pipeline 模式去连贯的,Pipeline 是指上游和上游计算工作是同时运行的,随着上游一直产出数据,上游同时在一直生产数据。这种全 Pipeline 的执行形式能够: ...

September 7, 2021 · 3 min · jiezi

关于flink:Apache-Flink-在京东的实践与优化

简介: Flink 助力京东实时计算平台朝着批流一体的方向演进。本文整顿自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题《Apache Flink 在京东的实际与优化》,内容包含: 业务演进和规模容器化实际Flink 优化改良将来布局 一、业务演进和规模1. 业务演进京东在 2014 年基于 storm 打造了第一代流式解决平台,能够较好的满足业务对于数据处理实时性的要求。不过它有一些局限性,对于那些数据量特地大,然而对提早却不那么敏感的业务场景,显得有些力不从心。于是咱们在 2017 年引入了 Spark streaming,利用它的微批处理来应答这种业务场景。 随着业务的倒退和业务规模的扩充,咱们迫切需要一种兼具低提早和高吞吐能力,同时反对窗口计算、状态和恰好一次语义的计算引擎。 于是在 2018 年,咱们引入了 Flink,同时开始基于 K8s 进行实时计算容器化的降级革新; 到了 2019 年,咱们所有的实时计算工作都跑在 K8s 上了。同年咱们基于 Flink 1.8 打造了全新的 SQL 平台,不便业务开发实时计算利用; 到了 2020 年,基于 Flink 和 K8s 打造的全新实时计算平台曾经比较完善了,咱们进行了计算引擎的对立,同时反对智能诊断,来升高用户开发和运维利用的老本和难度。在过来,流解决是咱们关注的一个重点。同年,咱们也开始反对批处理,于是整个实时计算平台开始朝着批流一体的方向演进。 2. 业务场景京东 Flink 服务于京东外部十分多的业务线,次要利用场景包含实时数仓、实时大屏、实时举荐、实时报表、实时风控和实时监控,当然还有其余一些利用场景。总之,实时计算的业务需要,个别都会用 Flink 进行开发。 3. 业务规模目前咱们的 K8s 集群由 5000 多台机器组成,服务了京东外部 20 多个一级部门。目前在线的流计算工作数有 3000 多,流计算的解决峰值达到 5亿条每秒。 二、容器化实际上面分享一下容器化的实际。 在 2017 年,京东外部的大多数工作还是 storm 工作,它们都是跑在物理机上的,同时还有一小部分的 Spark streaming 跑在 Yarn 上。不同的运行环境导致部署和运维的老本特地高,并且在资源利用上有肯定的节约,所以咱们迫切需要一个对立集群资源管理和调度零碎,来解决这个问题。 ...

September 2, 2021 · 2 min · jiezi

关于Flink:PyFlink-开发环境利器Zeppelin-Notebook

PyFlink 作为 Flink 的 Python 语言入口,其 Python 语言确实很简略易学,然而 PyFlink 的开发环境却不容易搭建,稍有不慎,PyFlink 环境就会乱掉,而且很难排查起因。明天给大家介绍一款可能帮你解决这些问题的 PyFlink 开发环境利器:Zeppelin Notebook。次要内容为: 筹备工作搭建 PyFlink 环境总结与将来兴许你早就据说过 Zeppelin,然而之前的文章都并重讲述如何在 Zeppelin 里开发 Flink SQL,明天则来介绍下如何在 Zeppelin 里高效的开发 PyFlink Job,特地是解决 PyFlink 的环境问题。 一句来总结这篇文章的主题,就是在 Zeppelin notebook 里利用 Conda 来创立 Python env 主动部署到 Yarn 集群中,你无需手动在集群下来装置任何 PyFlink 的包,并且你能够在一个 Yarn 集群里同时应用相互隔离的多个版本的 PyFlink。最初你能看到的成果就是这样: 1. 可能在 PyFlink 客户端应用第三方 Python 库,比方 matplotlib: 2. 能够在 PyFlink UDF 里应用第三方 Python 库,如: 接下来看看如何来实现。 一、筹备工作Step 1.筹备好最新版本的 Zeppelin 的搭建,这个就不在这边开展了,如果有问题能够退出 Flink on Zeppelin 钉钉群 (34517043) 征询。另外须要留神的是,Zeppelin 部署集群须要是 Linux,如果是 Mac 的话,会导致在 Mac 机器上打的 Conda 环境无奈在 Yarn 集群里应用 (因为 Conda 包在不同零碎间是不兼容的)。 ...

August 25, 2021 · 3 min · jiezi

关于flink:flink-基础2-sql-客户端

一、参考flink 学习系列目录 ——更新ing Flink SQL Apache Calcite 二、概览flink对SQL的反对,基于实现了SQL规范的Apache Calcite 2.1 语法分类flink SQL蕴含语言如下: (1) 数据定义语言(Data Definition Language,DDL) (2) 数据操纵语言(Data Manipulation Language,DML) (3) 查询语言 2.2 反对的语句语句形容SELECT (Queries) CREATE TABLE, DATABASE, VIEW, FUNCTION DROP TABLE, DATABASE, VIEW, FUNCTION ALTER TABLE, DATABASE, FUNCTION INSERT SQL HINTS DESCRIBE EXPLAIN USE SHOW LOAD UNLOAD 三、根本应用3.1 启动sql/Users/yz/work/env/flink/flink-1.13.0./bin/start-cluster.sh./bin/sql-client.sh

August 25, 2021 · 1 min · jiezi

关于flink:flink-基础1-安装使用

一、参考flink 学习系列目录 ——更新ing Local Installation 二、下载安装镜像地址 flink-1.13.0-bin-scala_2.11.tgz tar -xzf flink-1.13.0-bin-scala_2.11.tgzcd flink-1.13.0pwd/Users/yz/work/env/flink/flink-1.13.0三、根本应用3.1 启动集群cd /Users/yz/work/env/flink/flink-1.13.0./bin/start-cluster.sh 3.2 执行一个工作./bin/flink run examples/streaming/WordCount.jar 查看工作执行输入 tail log/flink-yz-taskexecutor-0-thewinddeMacBook-Pro.local.out 3.3 进行集群cd /Users/yz/work/env/flink/flink-1.13.0./bin/stop-cluster.sh四、治理界面启动 flink集群后,本地8081对应了一个治理利用, http://localhost:8081/#/overview

August 25, 2021 · 1 min · jiezi

关于Flink:快手基于-Flink-构建实时数仓场景化实践

本文整顿自快手数据技术专家李天朔在 5 月 22 日北京站 Flink Meetup 分享的议题《快手基于 Flink 构建实时数仓场景化实际》,内容包含: 快手实时计算场景快手实时数仓架构及保障措施快手场景问题及解决方案将来布局一、快手实时计算场景 快手业务中的实时计算场景次要分为四块: 公司级别的外围数据:包含公司经营大盘,实时外围日报,以及挪动版数据。相当于团队会有公司的大盘指标,以及各个业务线,比方视频相干、直播相干,都会有一个外围的实时看板;大型流动实时指标:其中最外围的内容是实时大屏。例如快手的春晚流动,咱们会有一个总体的大屏去看总体流动现状。一个大型的流动会分为 N 个不同的模块,咱们对每一个模块不同的玩法会有不同的实时数据看板;经营局部的数据:经营数据次要包含两方面,一个是创作者,另一个是内容。对于创作者和内容,在经营侧,比方上线一个大 V 的流动,咱们想看到一些信息如直播间的实时现状,以及直播间对于大盘的牵引状况。基于这个场景,咱们会做各种实时大屏的多维数据,以及大盘的一些数据。 此外,这块还包含经营策略的撑持,比方咱们可能会实时挖掘一些热点内容和热点创作者,以及目前的一些热点状况。咱们基于这些热点状况输入策略,这个也是咱们须要提供的一些撑持能力; 最初还包含 C 端数据展现,比方当初快手里有创作者核心和主播核心,这里会有一些如主播关播的关播页,关播页的实时数据有一部分也是咱们做的。 实时特色:蕴含搜寻举荐特色和广告实时特色。二、快手实时数仓架构及保障措施1. 指标及难点 1.1 指标首先因为咱们是做数仓的,因而心愿所有的实时指标都有离线指标去对应,要求实时指标和离线指标整体的数据差别在 1% 以内,这是最低标准。其次是数据提早,其 SLA 规范是流动期间所有外围报表场景的数据提早不能超过 5 分钟,这 5 分钟包含作业挂掉之后和复原工夫,如果超过则意味着 SLA 不达标。最初是稳定性,针对一些场景,比方作业重启后,咱们的曲线是失常的,不会因为作业重启导致指标产出一些显著的异样。1.2 难点第一个难点是数据量大。每天整体的入口流量数据量级大略在万亿级。在流动如春晚的场景,QPS 峰值能达到亿 / 秒。第二个难点是组件依赖比较复杂。可能这条链路里有的依赖于 Kafka,有的依赖 Flink,还有一些依赖 KV 存储、RPC 接口、OLAP 引擎等,咱们须要思考在这条链路里如何散布,能力让这些组件都能失常工作。第三个难点是链路简单。目前咱们有 200+ 外围业务作业,50+ 外围数据源,整体作业超过 1000。2. 实时数仓 - 分层模型基于下面三个难点,来看一下数仓架构: 如上所示: 最上层有三个不同的数据源,别离是客户端日志、服务端日志以及 Binlog 日志;在公共根底层分为两个不同的档次,一个是 DWD 层,做明细数据,另一个是 DWS 层,做公共聚合数据,DIM 是咱们常说的维度。咱们有一个基于离线数仓的主题预分层,这个主题预分层可能包含流量、用户、设施、视频的生产生产、风控、社交等。 DWD 层的外围工作是标准化的荡涤;DWS 层是把维度的数据和 DWD 层进行关联,关联之后生成一些通用粒度的聚合档次。再往上是应用层,包含一些大盘的数据,多维分析的模型以及业务专题数据;最下面是场景。整体过程能够分为三步: 第一步是做业务数据化,相当于把业务的数据接进来;第二步是数据资产化,意思是对数据做很多的荡涤,而后造成一些规定有序的数据;第三步是数据业务化,能够了解数据在实时数据层面能够反哺业务,为业务数据价值建设提供一些赋能。3. 实时数仓 - 保障措施基于下面的分层模型,来看一下整体的保障措施: ...

August 24, 2021 · 2 min · jiezi

关于Flink:SmartNews基于-Flink-加速-Hive-日表生产的实践

本文介绍了 SmartNews 利用 Flink 减速 Hive 日表的生产,将 Flink 无缝地集成到以 Airflow 和 Hive 为主的批处理零碎的实际。具体介绍过程中遇到的技术挑战和应答计划,以供社区分享。次要内容为: 我的项目背景问题的定义我的项目的指标技术选型技术挑战整体计划及挑战应答我的项目成绩和瞻望后记一、我的项目背景SmartNews 是一家机器学习驱动的互联网公司。自 2012 年于日本东京成立,并在美国和中国设有办公室。通过 8 年多的倒退,SmartNews 曾经成长为日本排名第一,美国成长最快的新闻类利用,笼罩寰球超过 150 多个国家市场。据 2019 年初统计,SmartNews 的 iOS 和 Android 版本寰球累计下载量曾经超过 5000 万次。 SmartNews 在过来 9 年的工夫,基于 Airflow, Hive, EMR 等技术栈构建了大量的数据集。随着数据量的增长,这些离线表的解决工夫在逐步拉长。另外,随着业务方迭代节奏的放慢,对表的实时性也提出了更高的要求。因而,SmartNews 外部发动了 Speedy Batch 的我的项目,以放慢现有离线表生产效率。 本次分享便是 Speedy Batch 我的项目中的一个例子,减速用户行为 (actions) 表的实际。 APP 端上报的用户行为日志,每日通过 Hive 作业生成日表,这个表是许多其余表的源头,至关重要。这个作业须要运行 3 个小时,进而拉高了许多上游表的提早 (Latency),显著影响数据科学家、产品经理等用户的应用体验。因而咱们须要对这些作业进行提速,让各个表能更早可用。 公司业务基本上都在私有云上,服务器的原始日志以文件模式上传至云存储,按日分区;目前的作业用 Airflow 调度到 EMR 上运行,生成 Hive 日表,数据存储在云存储。 二、问题的定义1. 输出新闻服务器每隔 30 秒上传一个原始日志文件,文件上传至相应日期和小时的云存储目录。 2. 输入原始日志通过 ETL 解决之后,按日 (dt) 和行为 (action) 两级分区输入。action 品种约 300 个,不固定,常有增减。 ...

August 24, 2021 · 3 min · jiezi

关于flink:flink-基础1-基本概念window

一、参考flink 学习系列目录 ——更新ing Flink 中极其重要的 Time 与 Window 具体解析

August 20, 2021 · 1 min · jiezi

关于flink:flink-学习系列目录-更新ing

一、根底flink 根底(1) ——基本概念window

August 20, 2021 · 1 min · jiezi

关于flink:SmartNews基于-Flink-加速-Hive-日表生产的实践

简介: 将 Flink 无缝地集成到以 Airflow 和 Hive 为主的批处理零碎的技术挑战和应答计划。 本文介绍了 SmartNews 利用 Flink 减速 Hive 日表的生产,将 Flink 无缝地集成到以 Airflow 和 Hive 为主的批处理零碎的实际。具体介绍过程中遇到的技术挑战和应答计划,以供社区分享。次要内容为: 我的项目背景问题的定义我的项目的指标技术选型技术挑战整体计划及挑战应答我的项目成绩和瞻望后记 一、我的项目背景SmartNews 是一家机器学习驱动的互联网公司。自 2012 年于日本东京成立,并在美国和中国设有办公室。通过 8 年多的倒退,SmartNews 曾经成长为日本排名第一,美国成长最快的新闻类利用,笼罩寰球超过 150 多个国家市场。据 2019 年初统计,SmartNews 的 iOS 和 Android 版本寰球累计下载量曾经超过 5000 万次。 SmartNews 在过来 9 年的工夫,基于 Airflow, Hive, EMR 等技术栈构建了大量的数据集。随着数据量的增长,这些离线表的解决工夫在逐步拉长。另外,随着业务方迭代节奏的放慢,对表的实时性也提出了更高的要求。因而,SmartNews 外部发动了 Speedy Batch 的我的项目,以放慢现有离线表生产效率。 本次分享便是 Speedy Batch 我的项目中的一个例子,减速用户行为 (actions) 表的实际。 APP 端上报的用户行为日志,每日通过 Hive 作业生成日表,这个表是许多其余表的源头,至关重要。这个作业须要运行 3 个小时,进而拉高了许多上游表的提早 (Latency),显著影响数据科学家、产品经理等用户的应用体验。因而咱们须要对这些作业进行提速,让各个表能更早可用。 公司业务基本上都在私有云上,服务器的原始日志以文件模式上传至云存储,按日分区;目前的作业用 Airflow 调度到 EMR 上运行,生成 Hive 日表,数据存储在云存储。 ...

August 20, 2021 · 3 min · jiezi

关于flink:Flink-CDC-20-正式发布详解核心改进

简介: 本文由社区志愿者陈政羽整顿,内容起源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的《详解 Flink-CDC》。深刻解说了最新公布的 Flink CDC 2.0.0 版本带来的外围个性,包含:全量数据的并发读取、checkpoint、无锁读取等重大改良。 一、CDC 概述CDC 的全称是 Change Data Capture ,在狭义的概念上,只有是能捕捉数据变更的技术,咱们都能够称之为 CDC 。目前通常形容的 CDC 技术次要面向数据库的变更,是一种用于捕捉数据库中数据变更的技术。CDC 技术的利用场景十分宽泛: 数据同步:用于备份,容灾;数据散发:一个数据源分发给多个上游零碎;数据采集:面向数据仓库 / 数据湖的 ETL 数据集成,是十分重要的数据源。CDC 的技术计划十分多,目前业界支流的实现机制能够分为两种: 基于查问的 CDC: 离线调度查问作业,批处理。把一张表同步到其余零碎,每次通过查问去获取表中最新的数据;无奈保障数据一致性,查的过程中有可能数据曾经产生了屡次变更;不保障实时性,基于离线调度存在人造的提早。基于日志的 CDC: 实时生产日志,流解决,例如 MySQL 的 binlog 日志残缺记录了数据库中的变更,能够把 binlog 文件当作流的数据源;保障数据一致性,因为 binlog 文件蕴含了所有历史变更明细;保障实时性,因为相似 binlog 的日志文件是能够流式生产的,提供的是实时数据。比照常见的开源 CDC 计划,咱们能够发现: 比照增量同步能力, 基于日志的形式,能够很好的做到增量同步; 而基于查问的形式是很难做到增量同步的。 比照全量同步能力,基于查问或者日志的 CDC 计划根本都反对,除了 Canal。 而比照全量 + 增量同步的能力,只有 Flink CDC、Debezium、Oracle Goldengate 反对较好。 从架构角度去看,该表将架构分为单机和分布式,这里的分布式架构不单纯体现在数据读取能力的程度扩大上,更重要的是在大数据场景下分布式系统接入能力。例如 Flink CDC 的数据入湖或者入仓的时候,上游通常是分布式的零碎,如 Hive、HDFS、Iceberg、Hudi 等,那么从对接入分布式系统能力上看,Flink CDC 的架构可能很好地接入此类零碎。 ...

August 13, 2021 · 4 min · jiezi

关于Flink:Flink-CDC-20-正式发布详解核心改进

本文由社区志愿者陈政羽整顿,内容起源自阿里巴巴高级开发工程师徐榜江 (雪尽) 7 月 10 日在北京站 Flink Meetup 分享的《详解 Flink-CDC》。深刻解说了最新公布的 Flink CDC 2.0.0 版本带来的外围个性,包含:全量数据的并发读取、checkpoint、无锁读取等重大改良。一、CDC 概述CDC 的全称是 Change Data Capture ,在狭义的概念上,只有是能捕捉数据变更的技术,咱们都能够称之为 CDC 。目前通常形容的 CDC 技术次要面向数据库的变更,是一种用于捕捉数据库中数据变更的技术。CDC 技术的利用场景十分宽泛: 数据同步:用于备份,容灾;数据散发:一个数据源分发给多个上游零碎;数据采集:面向数据仓库 / 数据湖的 ETL 数据集成,是十分重要的数据源。CDC 的技术计划十分多,目前业界支流的实现机制能够分为两种: 基于查问的 CDC: 离线调度查问作业,批处理。把一张表同步到其余零碎,每次通过查问去获取表中最新的数据;无奈保障数据一致性,查的过程中有可能数据曾经产生了屡次变更;不保障实时性,基于离线调度存在人造的提早。基于日志的 CDC: 实时生产日志,流解决,例如 MySQL 的 binlog 日志残缺记录了数据库中的变更,能够把 binlog 文件当作流的数据源;保障数据一致性,因为 binlog 文件蕴含了所有历史变更明细;保障实时性,因为相似 binlog 的日志文件是能够流式生产的,提供的是实时数据。比照常见的开源 CDC 计划,咱们能够发现: 比照增量同步能力, 基于日志的形式,能够很好的做到增量同步;而基于查问的形式是很难做到增量同步的。比照全量同步能力,基于查问或者日志的 CDC 计划根本都反对,除了 Canal。而比照全量 + 增量同步的能力,只有 Flink CDC、Debezium、Oracle Goldengate 反对较好。从架构角度去看,该表将架构分为单机和分布式,这里的分布式架构不单纯体现在数据读取能力的程度扩大上,更重要的是在大数据场景下分布式系统接入能力。例如 Flink CDC 的数据入湖或者入仓的时候,上游通常是分布式的零碎,如 Hive、HDFS、Iceberg、Hudi 等,那么从对接入分布式系统能力上看,Flink CDC 的架构可能很好地接入此类零碎。在数据转换 / 数据荡涤能力上,当数据进入到 CDC 工具的时候是否能较不便的对数据做一些过滤或者荡涤,甚至聚合? ...

August 12, 2021 · 4 min · jiezi

关于flink:京东Flink-SQL-优化实战

简介: 本文着重从 shuffle、join 形式的抉择、对象重用、UDF 重用等方面介绍了京东在 Flink SQL 工作方面做的优化措施。本文作者为京东算法服务部的张颖和段学浩,并由 Apache Hive PMC,阿里巴巴技术专家李锐帮忙校对。次要内容为: 背景Flink SQL 的优化总结 一、背景 目前,京东搜寻举荐的数据处理流程如上图所示。能够看到实时和离线是离开的,离线数据处理大部分用的是 Hive / Spark,实时数据处理则大部分用 Flink / Storm。 这就造成了以下景象:在一个业务引擎里,用户须要保护两套环境、两套代码,许多共性不能复用,数据的品质和一致性很难失去保障。且因为流批底层数据模型不统一,导致须要做大量的拼凑逻辑;甚至为了数据一致性,须要做大量的同比、环比、二次加工等数据比照,效率极差,并且非常容易出错。 而反对批流一体的 Flink SQL 能够很大水平上解决这个痛点,因而咱们决定引入 Flink 来解决这种问题。 在大多数作业,特地是 Flink 作业中,执行效率的优化始终是 Flink 工作优化的要害,在京东每天数据增量 PB 级状况下,作业的优化显得尤为重要。 写过一些 SQL 作业的同学必定都晓得,对于 Flink SQL 作业,在一些状况下会造成同一个 UDF 被重复调用的状况,这对一些耗费资源的工作十分不敌对;此外,影响执行效率大抵能够从 shuffle、join、failover 策略等方面思考;另外,Flink 工作调试的过程也非常复杂,对于一些线上机器隔离的公司来说尤甚。 为此,咱们实现了内嵌式的 Derby 来作为 Hive 的元数据存储数据库 (allowEmbedded);在工作复原方面,批式作业没有 checkpoint 机制来实现failover,然而 Flink 特有的 region 策略能够使批式作业疾速复原;此外,本文还介绍了对象重用等相干优化措施。 二、 Flink SQL 的优化1. UDF 重用在 Flink SQL 工作里会呈现以下这种状况:如果雷同的 UDF 既呈现在 LogicalProject 中,又呈现在 Where 条件中,那么 UDF 会进行屡次调用 (见https://issues.apache.org/jir...。然而如果该 UDF 十分耗 CPU 或者内存,这种多余的计算会十分影响性能,为此咱们心愿能把 UDF 的后果缓存起来下次间接应用。在设计的时候须要思考:(十分重要:请肯定保障 LogicalProject 和 where 条件的 subtask chain 到一起) ...

August 11, 2021 · 3 min · jiezi

关于Flink:Flink-EOS整合MySQL验证2PC

一、前言假如以后Flink利用已实现EOS(即 Exactly-Once Semantics)语义,当初须要减少Flink解决数据长久化到MySQL,前提条件不能突破Flink EOS的生态。官网提供的flink-connector-jdbc并没有提供事务和checkpoint的相干操作,自定义sink须要思考和CheckPoint简单的配合。参考Flink EOS如何避免内部零碎乱入,可自定义实现TwoPhaseCommitSinkFunction类,实现MySQL内部零碎组件的完满嵌入。 本次模仿Flink生产Kafka数据并写入MySQL,通过自定义MySQL Sink验证Flink 2PC以及EOS的准确性。相应的零碎及组件版本如下,Flink的部署形式为Standalone。 组件/零碎版本centOS7.5Flink1.12.2MySQL5.7Kafka2.3.1Zookeeper3.4.5Hadoop2.6.0二、验证思路及猜想后果: kafka发送:一共发送20条数据,每条数据开端数字自增,不便察看成果。每条发送距离为10秒,一共耗时200s。 flink解决:checkpoint工夫价格为60s,重启提早为10s,解决第10条数据的时候模仿产生bug,解决完第19条数据的时候,手动勾销job,利用checkpoint复原job。 猜想1:产生bug时,解决过的数据但未做checkpoint不能长久化到MySQL,只有做了checkpoint的数据能力长久化到MySQL。即checkpioint的提交和MySQL事务的最终提交是保持一致的。 猜想2:job重启会进行事务回滚,从新执行写入事务操作。 猜想3:job失败,利用checkpoint复原job能保证数据恰好解决一次的准确语义。 验证猜想1: 通过截图日志以及两图比照可知,checkPoint实现后回调了MySQL的commit操作,且尾数134之前的数据全副写入MySQL(即最初一次checkpoint之前的数据全副长久化胜利),阐明MySQL的事务是和checkpoint保持一致的。 验证猜想2: 通过比照job重启前后的日志比照,发现135-137数据产生了事务回滚,并从新进行的写入操作。 验证猜想3: job未手动重启之前,能够看到kafka producer理论发送的数据和长久化MySQL的数据是不统一的,接下来就是验证,利用Flink的checkpoint复原作业最终能达到准确一次生产的语义。 找到最初一次checkpoint的门路,执行以下命令进行job复原 bin/flink run -s hdfs://lsl001:8020/checkpoint/flink-checkpoint/ca7caa1b21052bb1dbb02d5533b93df4/chk-5 flink_study-1.0-SNAPSHOT.jar --detached job重启胜利,从截图日志可看到,没有长久化胜利的数据,从新执行了写入操作,最终通过checkpoint胜利提交事务。MySQL查问后果如下图: 三、总结通过上述的测试流程,咱们能够失去如下论断: Flink Job重启或者失败,事务都会回滚,并且都能最终保证数据的准确一次生产。Flink CheckPoin和两阶段提交时亲密绑定的。自定义MySQL sink实现TwoPhaseCommitSinkFunction类可实现MySQL零碎敌对的融入Flink EOS生态。

August 9, 2021 · 1 min · jiezi

关于flink:Flink-在爱奇艺广告业务的实践

简介: 5 月 22 日北京站 Flink Meetup 分享的议题。本文整顿自爱奇艺技术经理韩红根在 5 月 22 日北京站 Flink Meetup 分享的议题《Flink 在爱奇艺广告业务的实际》,内容包含: 业务场景业务实际Flink 应用过程中的问题及解决将来布局 一、业务场景 实时数据在广告业务的应用场景次要能够分为四个方面: 数据大屏:包含曝光、点击、支出等外围指标的展现,以及故障率等监控指标;异样监测:因为广告投放的链路比拟⻓,所以如果链路上产生任何稳定的话,都会对整体的投放成果产生影响。除此之外,各个团队在上线过程中是否会对整体投放产生影响,都是通过异样监测零碎可能观测到的。咱们还可能观测业务指标走势是否正当,比方在库存失常的状况下,曝光是否有不同的稳定状况,这能够用来实 时发现问题;数据分析:次要用于数据赋能业务倒退。咱们能够实时剖析广告投放过程中的一些异样问题,或者基于以后的投放成果去钻研怎么优化,从而达到更好的成果;特色工程:广告算法团队次要是做一些模型训练,用于反对线上投放。技术特色最后大部分是离线,随着实时的倒退,开始把一些工程转到实时。二、业务实际业务实际次要分为两类,第一个是实时数仓,第二个是特色工程。 1. 实时数仓1.1 实时数仓 - 指标 实时数仓的指标包含数据完整性、服务稳定性和查问能力。 数据完整性:在广告业务里,实时数据次要是用于领导决策,比方广告主须要依据以后投放的实时数据,领导前面的出价或调整估算。另外,故障率的监控须要数据自身是稳固的。如果数据是稳定的,指导意义就十分差,甚至没有什么指导意义。因而完整性自身是对时效性和完整性之间做了一个衡量;服务稳定性:生产链包含数据接入、计算(多层)、数据写入、进度服务和查问服务。除此之外还有数据品质,包含数据的准确性以及数据趋势是否合乎预期;查问能力:在广告业务有多种应用场景,在不同场景里可能应用了不同的 OLAP 引擎,所以查问形式和性能的要求不统一。另外,在做数据分析的时候,除了最新最稳固的实时数据之外,同时也会实时 + 离线做剖析查问,此外还包含数据跨源和查问性能等要求。1.2 实时数仓 - 挑战 数据进度服务:须要在时效性和完整性之间做一个衡量。数据稳定性:因为生产链路比拟长,两头可能会用到多种性能组件,所以端到端的服务稳定性对整体数据准确性的影响是比拟要害的。查问性能:次要包含 OLAP 剖析能力。在理论场景中,数据表蕴含了离线和实时,单表规模达上百列,行数也是十分大的。1.3 广告数据平台架构 上图为广告数据平台根底架构图,从下往上看: 底部是数据采集层,这里与大部分公司基本一致。业务数据库次要蕴含了广告主的下单数据以及投放的策略;埋点日志和计费日志是广告投放链路过程中产生的日志;两头是数据生产的局部,数据生产的底层是大数据的基础设施,这部分由公司的一个云平台团队提供,其中蕴含 Spark / Flink 计算引擎,Babel 对立的治理平台。Talos 是实时数仓服务,RAP 和 OLAP 对应不同的实时剖析以及 OLAP 存储和查问服务。数据生产的中间层是广告团队蕴含的一些服务,例如在生产里比拟典型的离线计算和实时计算。 离线是比拟常见的一个分层模型,调度零碎是对生产出的离线工作做无效的治理和调度。实时计算这边应用的引擎也比拟多,咱们的实时化是从 2016 年开始,过后选的是 Spark Streaming,前面随着大数据技术倒退以及公司业务需要产生了不同场景,又引入了计算引擎 Flink。实时计算底层调度依赖于云计算的 Babel 零碎,除了计算之外还会随同数据治理,包含进度治理,就是指实时计算里一个数据报表以后曾经稳固的进度到哪个工夫点。离线里其实就对应一个表,有哪些分区。血统治理包含两方面,离线包含表级别的血统以及字段血统。实时次要还是在工作层面的血统。至于生命周期治理,在离线的一个数仓里,它的计算是继续迭代的。然而数据保留工夫十分长的话,数据量对于底层的存储压力就会比拟大。数据生命周期治理次要是依据业务需要和存储老本之间做一个衡量。品质治理次要包含两方面,一部分在数据接入层,判断数据自身是否正当;另外一部分在数据进口,就是后果指标这一层。因为咱们的数据会供应其余很多团队应用,因而在数据进口这一层要保证数据计算没有问题。再下层是对立查问服务,咱们会封装很多接口进行查问。因为数据化包含离线和实时,另外还有跨集群,所以在智能路由这里会进行一些全集群、选表以及简单查问、拆分等外围性能。查问服务会对历史查问进行热度的对立治理。这样一方面能够更应进一步服务生命周期治理,另一方面能够去看哪些数据对于业务的意义十分大。除了生命周期治理之外,它还能够领导咱们的调度零碎,比方哪些报表比拟要害,在资源缓和的时候就能够优先调度这些工作。再往上是数据利用,包含报表零碎、Add - hoc 查问、数据可视化、异样监控和上游团队。1.4 实时数仓 - 生产链路 ...

August 6, 2021 · 3 min · jiezi

关于Flink:京东Flink-SQL-优化实战

本文作者为京东算法服务部的张颖和段学浩,并由 Apache Hive PMC,阿里巴巴技术专家李锐帮忙校对。次要内容为: 背景Flink SQL 的优化总结一、背景 目前,京东搜寻举荐的数据处理流程如上图所示。能够看到实时和离线是离开的,离线数据处理大部分用的是 Hive / Spark,实时数据处理则大部分用 Flink / Storm。 这就造成了以下景象:在一个业务引擎里,用户须要保护两套环境、两套代码,许多共性不能复用,数据的品质和一致性很难失去保障。且因为流批底层数据模型不统一,导致须要做大量的拼凑逻辑;甚至为了数据一致性,须要做大量的同比、环比、二次加工等数据比照,效率极差,并且非常容易出错。 而反对批流一体的 Flink SQL 能够很大水平上解决这个痛点,因而咱们决定引入 Flink 来解决这种问题。 在大多数作业,特地是 Flink 作业中,执行效率的优化始终是 Flink 工作优化的要害,在京东每天数据增量 PB 级状况下,作业的优化显得尤为重要。 写过一些 SQL 作业的同学必定都晓得,对于 Flink SQL 作业,在一些状况下会造成同一个 UDF 被重复调用的状况,这对一些耗费资源的工作十分不敌对;此外,影响执行效率大抵能够从 shuffle、join、failover 策略等方面思考;另外,Flink 工作调试的过程也非常复杂,对于一些线上机器隔离的公司来说尤甚。 为此,咱们实现了内嵌式的 Derby 来作为 Hive 的元数据存储数据库 (allowEmbedded);在工作复原方面,批式作业没有 checkpoint 机制来实现failover,然而 Flink 特有的 region 策略能够使批式作业疾速复原;此外,本文还介绍了对象重用等相干优化措施。 二、 Flink SQL 的优化1. UDF 重用在 Flink SQL 工作里会呈现以下这种状况:如果雷同的 UDF 既呈现在 LogicalProject 中,又呈现在 Where 条件中,那么 UDF 会进行屡次调用 (见https://issues.apache.org/jir...。然而如果该 UDF 十分耗 CPU 或者内存,这种多余的计算会十分影响性能,为此咱们心愿能把 UDF 的后果缓存起来下次间接应用。在设计的时候须要思考:(十分重要:请肯定保障 LogicalProject 和 where 条件的 subtask chain 到一起) ...

August 5, 2021 · 4 min · jiezi

关于Flink:Flink-在爱奇艺广告业务的实践

本文整顿自爱奇艺技术经理韩红根在 5 月 22 日北京站 Flink Meetup 分享的议题《Flink 在爱奇艺广告业务的实际》,内容包含: 业务场景业务实际Flink 应用过程中的问题及解决将来布局一、业务场景 实时数据在广告业务的应用场景次要能够分为四个方面: 数据大屏:包含曝光、点击、支出等外围指标的展现,以及故障率等监控指标;异样监测:因为广告投放的链路比拟⻓,所以如果链路上产生任何稳定的话,都会对整体的投放成果产生影响。除此之外,各个团队在上线过程中是否会对整体投放产生影响,都是通过异样监测零碎可能观测到的。咱们还可能观测业务指标走势是否正当,比方在库存失常的状况下,曝光是否有不同的稳定状况,这能够用来实 时发现问题;数据分析:次要用于数据赋能业务倒退。咱们能够实时剖析广告投放过程中的一些异样问题,或者基于以后的投放成果去钻研怎么优化,从而达到更好的成果;特色工程:广告算法团队次要是做一些模型训练,用于反对线上投放。技术特色最后大部分是离线,随着实时的倒退,开始把一些工程转到实时。二、业务实际业务实际次要分为两类,第一个是实时数仓,第二个是特色工程。 1. 实时数仓1.1 实时数仓 - 指标 实时数仓的指标包含数据完整性、服务稳定性和查问能力。 数据完整性:在广告业务里,实时数据次要是用于领导决策,比方广告主须要依据以后投放的实时数据,领导前面的出价或调整估算。另外,故障率的监控须要数据自身是稳固的。如果数据是稳定的,指导意义就十分差,甚至没有什么指导意义。因而完整性自身是对时效性和完整性之间做了一个衡量;服务稳定性:生产链包含数据接入、计算(多层)、数据写入、进度服务和查问服务。除此之外还有数据品质,包含数据的准确性以及数据趋势是否合乎预期;查问能力:在广告业务有多种应用场景,在不同场景里可能应用了不同的 OLAP 引擎,所以查问形式和性能的要求不统一。另外,在做数据分析的时候,除了最新最稳固的实时数据之外,同时也会实时 + 离线做剖析查问,此外还包含数据跨源和查问性能等要求。1.2 实时数仓 - 挑战 数据进度服务:须要在时效性和完整性之间做一个衡量。数据稳定性:因为生产链路比拟长,两头可能会用到多种性能组件,所以端到端的服务稳定性对整体数据准确性的影响是比拟要害的。查问性能:次要包含 OLAP 剖析能力。在理论场景中,数据表蕴含了离线和实时,单表规模达上百列,行数也是十分大的。1.3 广告数据平台架构 上图为广告数据平台根底架构图,从下往上看: 底部是数据采集层,这里与大部分公司基本一致。业务数据库次要蕴含了广告主的下单数据以及投放的策略;埋点日志和计费日志是广告投放链路过程中产生的日志;两头是数据生产的局部,数据生产的底层是大数据的基础设施,这部分由公司的一个云平台团队提供,其中蕴含 Spark / Flink 计算引擎,Babel 对立的治理平台。Talos 是实时数仓服务,RAP 和 OLAP 对应不同的实时剖析以及 OLAP 存储和查问服务。 数据生产的中间层是广告团队蕴含的一些服务,例如在生产里比拟典型的离线计算和实时计算。 离线是比拟常见的一个分层模型,调度零碎是对生产出的离线工作做无效的治理和调度。实时计算这边应用的引擎也比拟多,咱们的实时化是从 2016 年开始,过后选的是 Spark Streaming,前面随着大数据技术倒退以及公司业务需要产生了不同场景,又引入了计算引擎 Flink。实时计算底层调度依赖于云计算的 Babel 零碎,除了计算之外还会随同数据治理,包含进度治理,就是指实时计算里一个数据报表以后曾经稳固的进度到哪个工夫点。离线里其实就对应一个表,有哪些分区。血统治理包含两方面,离线包含表级别的血统以及字段血统。实时次要还是在工作层面的血统。至于生命周期治理,在离线的一个数仓里,它的计算是继续迭代的。然而数据保留工夫十分长的话,数据量对于底层的存储压力就会比拟大。数据生命周期治理次要是依据业务需要和存储老本之间做一个衡量。品质治理次要包含两方面,一部分在数据接入层,判断数据自身是否正当;另外一部分在数据进口,就是后果指标这一层。因为咱们的数据会供应其余很多团队应用,因而在数据进口这一层要保证数据计算没有问题。再下层是对立查问服务,咱们会封装很多接口进行查问。 因为数据化包含离线和实时,另外还有跨集群,所以在智能路由这里会进行一些全集群、选表以及简单查问、拆分等外围性能。查问服务会对历史查问进行热度的对立治理。这样一方面能够更应进一步服务生命周期治理,另一方面能够去看哪些数据对于业务的意义十分大。除了生命周期治理之外,它还能够领导咱们的调度零碎,比方哪些报表比拟要害,在资源缓和的时候就能够优先调度这些工作。再往上是数据利用,包含报表零碎、Add - hoc 查问、数据可视化、异样监控和上游团队。1.4 实时数仓 - 生产链路 数据生产链路是从工夫粒度来讲的,咱们最开始是离线数仓链路,在最底层的这一行,随着实时化需要推动,就产生了一个实时链路,整顿来说,是一个典型的 Lambda 架构。 另外,咱们的一些外围指标,比方计费指标,因为它的稳定性对上游比拟要害,所以咱们这边采纳异路多活。异路多活是源端日志产生之后,在计算层和上游存储层做了齐全的冗余,在前面的查问里做对立解决。 1.5 实时数仓 - 进度服务 ...

August 4, 2021 · 3 min · jiezi

关于flink:JdbcSink-简析

1、JdbcSink 用于DataStream减少Jdbc的Sink输入,次要两个接口:sink()和exactlyOnceSink()。其中exactlyOnceSink()是13版本新增的反对事务性的接口,本次次要介绍sink()接口。 public static <T> SinkFunction<T> sink( String sql, JdbcStatementBuilder<T> statementBuilder, JdbcExecutionOptions executionOptions, JdbcConnectionOptions connectionOptions) { return new GenericJdbcSinkFunction<>( new JdbcBatchingOutputFormat<>( new SimpleJdbcConnectionProvider(connectionOptions), executionOptions, context -> { Preconditions.checkState( !context.getExecutionConfig().isObjectReuseEnabled(), "objects can not be reused with JDBC sink function"); return JdbcBatchStatementExecutor.simple( sql, statementBuilder, Function.identity()); }, JdbcBatchingOutputFormat.RecordExtractor.identity()));}1.1、参数 接口有四个参数,其中第三个参数executionOptions能够省略应用默认值,具体样例参看1、JdbcSink形式 sql String类型,一个SQL语句模板,就是通常应用的PreparedStatement那种模式,例如:insert into wordcount (wordcl, countcl) values (?,?) statementBuilder JdbcStatementBuilder类型,作用是实现流数据与SQL具体列的对应,基于上一个参数的PreparedStatement模式,实现对应关系 executionOptions Flink Jdbc输入的执行规定,次要设置执行触发机制,次要设置三个参数:数据量触发阈值、工夫触发阈值、最大重试次数。其中,数据量触发默认为5000,工夫触发默认为0,即敞开工夫触发。留神触发阈值不要设置的过低,否则可能造成数据库的阻塞。 connectionOptions JdbcConnectionOptions类型,用于设置数据库连贯属性,包含Url、Driver、Username、Password等 1.2、返回 接口返回的是一个基于SinkFunction实现的GenericJdbcSinkFunction类,其外围是参数JdbcBatchingOutputFormat。 GenericJdbcSinkFunction的后果外围办法如下,都是基于JdbcBatchingOutputFormat的操作。 @Overridepublic void open(Configuration parameters) throws Exception { super.open(parameters); RuntimeContext ctx = getRuntimeContext(); outputFormat.setRuntimeContext(ctx); outputFormat.open(ctx.getIndexOfThisSubtask(), ctx.getNumberOfParallelSubtasks());}@Overridepublic void invoke(T value, Context context) throws IOException { outputFormat.writeRecord(value);}@Overridepublic void snapshotState(FunctionSnapshotContext context) throws Exception { outputFormat.flush();}2、JdbcBatchingOutputFormat JdbcBatchingOutputFormat是进行Jdbc交互的实现类,在向Jdbc输入前进行数据聚合 ...

July 25, 2021 · 2 min · jiezi

关于flink:Flink-SortShuffle读流程简析

1、SortMergeResultPartition的创立应用 首先是一个读过程的一个调用链 PartitionRequestServerHandler.channelRead0() ->CreditBasedSequenceNumberingViewReader.requestSubpartitionView() ->ResultPartitionManager.createSubpartitionView() ->SortMergeResultPartition.createSubpartitionView() ->SortMergeResultPartitionReadScheduler.crateSubpartitionReader() ->createFileReader()->new PartitionedFileReader() SortMergeResultPartition的创立,由上一篇写出篇可知,SortMergeResultPartition是在ResultPartitionFactory创立的。首先SortMergeResultPartition对象的创立调用链: new Task() ->NettyShuffleEnvironment.createResultPartitionWriters() ->ResultPartitionFactory.create() 之后调用ConsumableNotifyingResultPartitionWriterDecorator.decorate()封装进Task的成员consumableNotifyingPartitionWriters,再之后是注册治理这个SortMergeResultPartition: Task.doRun() ->setupPartitionsAndGates() ->consumableNotifyingPartitionWriters: SortMergeResultPartition.setup() ->ResultPartition.setup() ->ResultPartitionManager.registerResultPartition(this) ->registeredPartitions.put() 以上注册进了registeredPartitions的列表当中(registeredPartitions是ResultPartitionManager的成员变量),再依据第一个调用链,在createSubpartitionView()的时候从列表获取应用 有一点须要留神的是,shuffle文件在工作完结的时候才会实现全副写出(次要是index文件),也就是PartitionedFile在Task完结才会创立,之后文件追随TaskManager的对立治理,也就是ResultPartitionManager。也就是说,这里的读过程并不是上游来上游工作读的过程,而是对上游输入的读的一个解决。 整个治理相干的链路如下: TaskManagerServices.createShuffleEnvironment() ->NettyShuffleServiceFactory.createShuffleEnvironment() ->createNettyShuffleEnvironment()-> new ResultPartitionManager() ->new NettyConnectionManager() ->new NettyProtocol() -> 成员 partitionProvider ->new PartitionRequestServerHandler(partitionProvider,...) 最初跟第一个链路关联上了,partitionProvider即第一个链路中的ResultPartitionManager PartitionedFile是在工作完结的时候实现对象的创立的,如下在Task.doRun()中,会调用实现ResultPartition的输入 // finish the produced partitions. if this fails, we consider the execution failed.for (ResultPartitionWriter partitionWriter : consumableNotifyingPartitionWriters) { if (partitionWriter != null) { partitionWriter.finish(); }} 最终调用到PartitionedFileWriter的finish()接口,实现PartitionedFile对象的创立 ...

July 25, 2021 · 3 min · jiezi

关于Flink:360-政企安全集团基于-Flink-的-PB-级数据即席查询实践

本文整顿自 360 政企平安团体的大数据工程师苏军以及刘佳在 Flink Forward Asia 2020 分享的议题《基于 Flink 的 PB 级数据即席查问实际》,文章内容为: Threat Hunting 平台的架构与设计(苏军)以升高 IO 为指标的优化与摸索(刘佳)将来布局 首先做一个简略的集体以及团队介绍。咱们来自 360 政企平安团体,目前次要从事 360 平安大脑的 “威逼狩猎“ 我的项目的开发工作。咱们团队接触 Flink 的工夫比拟早,在此期间,咱们基于 Flink 开发出了多款产品,并在 2017 年和 2019 年加入了于柏林举办的 Flink Forward 大会,别离介绍了咱们的 “UEBA” 以及 “AutoML” 两款产品。 本次分享次要分为两块内容: 第一局部 “Threat Hunting 平台的架构与设计” 将由苏军来为大家分享;第二局部 “以升高 IO 为指标的优化与摸索” 将由刘佳来为大家分享。一、Threat Hunting 平台的架构与设计 (苏军)第一局部内容大抵分为三个局部,别离是: 平台的演进架构设计深刻摸索索引构造1. 平台的演进 咱们认为所有技术的演变和变革都须要具体的商业问题来驱动,以下是咱们团队近几年基于 Flink 开发的几款产品: 2017 年咱们基于 Flink DataStream 开发了用户行为剖析零碎 UEBA,它是通过接入企业 IT 拓扑的各类行为数据,比方身份认证数据、利用零碎拜访数据、终端平安数据、网络流量解析数据等等,以用户 / 资产为外围来进行威逼行为的实时检测,最初构建出用户威逼等级和画像的零碎;2018 年基于 UEBA 的施行教训,咱们发现平安剖析人员往往须要一种伎俩来获取安全事件对应的原始日志,去进一步确认平安威逼的源头和解决形式。于是咱们基于 Spark 开发了 HQL 来解决在离线模式下的数据检索问题,其中 HQL 能够认为是表达能力比 SQL 更加丰盛的查询语言,大抵能够看作是在 SQL 能力的根底上减少了算法类算;2019 年随着离线 HQL 在客户那边的应用,咱们发现其自身就可能疾速定义平安规定,构建威逼模型,如果在离线模式下写完语句后间接公布成在线工作,会大大缩短开发周期,加上 Flink SQL 能力绝对欠缺,于是咱们基于 Flink SQL + CEP 来降级了 HQL 的能力,产生了 HQL RealTime 版本;2020 年随着客户数据量的增大,很多曾经达到了 PB 级,过往的解决方案导致离线的数据检索性能远远低于预期,平安剖析人员习惯应用 like 和全文检索等含糊匹配操作,造成查问延时十分大。于是从往年开始,咱们着重优化 HQL 的离线检索能力,并推出了全新的 Threat Hunting 平台。 ...

July 20, 2021 · 4 min · jiezi

关于flink:flink学习

flink搭建环境:centos7 docker1.docker pull flink2.创立文件docker-compose.yml,内容如下: version: "2.1"services: jobmanager: image: flink:1.9.2-scala_2.12 expose: - "6123" ports: - "8081:8081" command: jobmanager environment: - JOB_MANAGER_RPC_ADDRESS=jobmanager taskmanager: image: flink:1.9.2-scala_2.12 expose: - "6121" - "6122" depends_on: - jobmanager command: taskmanager links: - "jobmanager:jobmanager" environment: - JOB_MANAGER_RPC_ADDRESS=jobmanager3.在文件目录下执行命令 docker-compose up -d4.主机ip+8081查看控制台是否显示 flink我的项目搭建1.maven创立flink我的项目 $ mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.13.12.pom.xml文件增加rabbitmq依赖 依赖如下 <dependencies> <!-- Apache Flink dependencies --> <!-- These dependencies are provided, because they should not be packaged into the JAR file. --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version><!-- <scope>provided</scope>--> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_${scala.binary.version}</artifactId> <version>${flink.version}</version><!-- <scope>provided</scope>--> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_${scala.binary.version}</artifactId> <version>${flink.version}</version><!-- <scope>provided</scope>--> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-rabbitmq_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> <!-- Add connector dependencies here. They must be in the default scope (compile). --> <!-- Example: <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> --> <!-- Add logging framework, to produce console output when running in the IDE. --> <!-- These dependencies are excluded from the application JAR by default. --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version><!-- <scope>runtime</scope>--> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version><!-- <scope>runtime</scope>--> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version><!-- <scope>runtime</scope>--> </dependency> </dependencies>3.WordCountJob ...

July 19, 2021 · 2 min · jiezi

关于Flink:Flink实时数仓DWD层数据准备

一、需要剖析及实现思路1.1、 分层需要剖析 建设实时数仓的目标,次要是减少数据计算的复用性。每次新减少统计需要时,不至于从原始数据进行计算,而是从半成品持续加工而成。咱们这里从 kafka 的 ods 层读取用户行为日志以及业务数据,并进行简略解决,写回到 kafka 作为 dwd 层。 1.2、 每层的职能分层数据形容生成计算工具存储媒介ODS原始数据,日志和业务数据日志服务器,maxwell/canalkafkaDWD依据数据对象为单位进行分流,比方订单、页面拜访等等。FLINKkafkaDWM对于局部数据对象进行进一步加工,比方独立拜访、跳出行为。仍旧是明细数据。FLINKkafkaDIM维度数据FLINKHBaseDWS依据某个维度主题将多个事实数据轻度聚合,造成主题宽表。FLINKClickhouseADS把 Clickhouse 中的数据依据可视化须要进行筛选聚合。Clickhouse, SQL可视化展现二、 DWD 层数据筹备实现思路➢ 性能 1:环境搭建➢ 性能 2:计算用户行为日志 DWD 层➢ 性能 3:计算业务数据 DWD 层 2.1、环境搭建目录作用app产生各层数据的 flink 工作bean数据对象common公共常量utils工具类2.2、计算用户行为日志 DWD 层2.3、计算业务数据 DWD 层

July 17, 2021 · 1 min · jiezi

关于Flink:Flink实时数仓日志数据采集

一、日志数据采集1.1、模仿日志生成器的应用这里提供了一个模仿生成数据的 jar 包,能够将日志发送给某一个指定的端口,须要大数据程序员理解如何从指定端口接收数据并数据进行解决的流程。 1.2、行为数据1.2.1、启动chb-logger1.2.2、在rt_applog启动模仿日志生成器,生成行为日志,通过chb-logger采集,写入 kafka[root@s205 rt_applog]# clear[root@s205 rt_applog]# pwd/home/chenb/chb-realtime/rt_applog[root@s205 rt_applog]# lltotal 15280-rw-r--r-- 1 root root 985 Mar 8 13:13 application.yml-rw-r--r-- 1 root root 15642393 Mar 2 15:06 gmall2020-mock-log-2020-12-18.jardrwxr-xr-x 2 root root 34 Mar 8 10:48 logs[root@s205 rt_applog]# java -jar gmall2020-mock-log-2020-12-18.jar 1.3、业务数据, 写入数据库, 后续通过 Canal 同步到 kafka 1.3.1、模仿生成业务数据,写入MySQL中[root@s205 rt_dblog]# pwd/home/chenb/chb-realtime/rt_dblog[root@s205 rt_dblog]# lltotal 14780-rw-r--r-- 1 root root 1506 Mar 8 10:30 application.properties-rw-r--r-- 1 root root 15128654 Mar 2 15:06 gmall2020-mock-db-2020-11-27.jar[root@s205 rt_dblog]# java -jar gmall2020-mock-db-2020-11-27.jar 1.3.2、配置Canal1.3.2.1、server配置# tcp, kafka, RocketMQcanal.serverMode = kafkacanal.mq.servers = s202:9092,s203:9092,s204:9092# true 写入kafka为json格局, false 写入kafka为probutf格局canal.mq.flatMessage = true1.3.2.2、instance配置canal.instance.master.address=s203:3306# table regex 监控的表canal.instance.filter.regex=chb_realtime\\.*# mq config canal.mq.topic=ods_base_db_m # 发送到kafka的那个topic1.3.2.3、测试数据, 批改一条 ...

July 17, 2021 · 1 min · jiezi

关于Flink:袋鼠云基于Flink构建实时计算平台的总体架构和关键技术点

平台建设的背景传统离线数据开发时效性较差,无奈满足疾速迭代的互联网需要。随同着以 Flink 为代表的实时技术的飞速发展,实时计算被越来越多的企业应用,然而在应用中,各种问题也随之而来。比方开发者应用门槛高、产出的业务数据品质没有保障、企业短少对立平台治理难以保护等。在诸多不利因素的影响下,咱们决定利用现有的 Flink 技术构建一套残缺的实时计算平台。 平台总体架构从总体架构来看,实时计算平台大体能够分为三层: 计算平台调度平台资源平台。每层承当着相应的性能,同时层与层之间又有交互,合乎高内聚、低耦合的设计原子,架构图如下: 计算平台间接面向开发人员应用,能够依据业务需要接入各种内部数据源,提供后续工作应用。数据源配置实现后,就能够在下面做基于 Flink 框架可视化的数据同步、SQL 化的数据计算的工作,并且能够对运行中的工作进行多维度的监控和告警。 调度平台该层接管到平台传过来的工作内容和配置后,接下来就是比拟外围的工作,也是下文中重点开展的内容。这里先做一个大体的介绍,依据工作类型的不同将应用不同的插件进行解析。 数据同步工作:接管到下层传过来的 json 后,进入到 FlinkX 框架中,依据数据源端和写出指标端的不同生成对应的 DataStream,最初转换成 JobGraph。数据计算工作:接管到下层传过来的 SQL 后,进入到 FlinkStreamSQL 框架中,解析 SQL、注册成表、生成 transformation,最初转换成 JobGraph。调度平台将失去的 JobGraph 提交到对应的资源平台,实现工作的提交。 资源平台目前能够对接多套不同的资源集群,并且也能够对接不同的资源类型,如:yarn 和 k8s. 数据同步和数据计算在调度平台中,接管到用户的工作后就开始了前面的一系列的转换操作,最终让工作运行起来。咱们从底层的技术细节来看如何基于 Flink 构建实时计算平台,以及如何应用 FlinkX、FlinkStreamSQL 做一站式开发。 FlinkX作为数据处理的第一步,也是最根底的一步,咱们来看看 FlinkX 是如何在 Flink 的根底上做二次开发。用户只须要关注同步工作的 json 脚本和一些配置,无需关怀调用 Flink 的细节,且 FlinkX 反对下图中所展现的性能。 咱们先看下 Flink 工作提交中波及到的流程,其中的交互流程图如下: 那么 FlinkX 又是如何在 Flink 的根底对上述组件进行封装和调用,使得 Flink 作为数据同步工具应用更加简略? 次要从 Client、JobManager、TaskManager 三个局部进行扩大,波及到的内容如下图: Client 端FlinkX 对原生的 Client 做了局部定制化开发,在 FlinkX-launcher 模块下,次要有以下几个步骤: ...

July 16, 2021 · 3 min · jiezi

关于flink:Pravega-Flink-connector-的过去现在和未来

本文整顿自戴尔科技团体软件工程师周煜敏在 Flink Forward Asia 2020 分享的议题《Pravega Flink Connector 的过来、当初和将来》,文章内容为: Pravega 以及 Pravega connector 简介Pravega connector 的过来回顾 Flink 1.11 高阶个性心得分享将来瞻望一、Pravega 以及 Pravega connector 简介 Pravega 我的项目的名字来源于梵语,意思是 good speed。我的项目起源于 2016 年,基于 Apache V2 协定在 Github 上开源,并且于 2020 年 11 月退出了 CNCF 的小家庭,成为了 CNCF 的 sandbox 我的项目。 Pravega 我的项目是为大规模数据流场景而设计的,补救传统音讯队列存储短板的一个新的企业级存储系统。它在放弃对于流的无边界、高性能的读写上,也减少了企业级的一些个性:例如弹性伸缩以及分层存储,能够帮忙企业用户升高应用和保护的老本。同时咱们也在存储畛域有着多年的技术积淀,能够依靠公司商用存储产品为客户提供长久化的存储。 以上的架构图形容的是 Pravega 典型的读写场景,借此进行 Pravega 术语介绍以帮忙大家进一步理解零碎架构。 两头局部是一个 Pravega 的集群 ,它整体是以 stream 形象的零碎。stream 能够认为是类比 Kafka 的 topic。同样,Pravega 的 Segment 能够类比 Kafka 的 Partition,作为数据分区的概念,同时提供动静伸缩的性能。 Segment 存储二进制数据数据流,并且依据数据流量的大小,产生 merge 或者 split 的操作,以开释或者集中资源。此时 Segment 会进行 seal 操作禁止新数据写入,而后由新建的 Segment 进行新数据的接管。 ...

July 16, 2021 · 3 min · jiezi

关于flink:Flink-112-资源管理新特性回顾

简介: 介绍 Flink 1.12 资源管理的一些个性,包含内存治理、资源调度、扩大资源框架。本文由社区志愿者陈政羽整顿,Apache Flink Committer、阿里巴巴技术专家宋辛童,Apache Flink Contributor、阿里巴巴高级开发工程师郭旸泽分享,次要介绍 Flink 1.12 资源管理的一些个性。内容次要分为 4 局部: 内存治理资源调度扩大资源框架将来布局 一、内存治理首先回顾 Flink 的内存模型变迁。下图右边别离为 Flink 1.10、Flink 1.11 引入的新的内存模型。只管波及的模块较多,但 80% - 90% 的用户仅需关注真正用于工作执行的 Task Heap Memory、Task Off-Heap Memory、Network Memory、Managed Memory 四局部。 其它模块大部分是 Flink 的框架内存,失常不须要调整,即便遇到问题也能够通过社区文档来解决。除此之外,“一个作业到底须要多少内存能力满足理论生产需要” 也是大家不得不面临的问题,比方其余指标的性能应用、作业是否因为内存不足影响了性能,是否存在资源节约等。 针对上述内容,社区在 Flink 1.12 版本提供了一个全新的, 对于 Task manager 和 Jobmanager 的 Web UI。 在新的 Web UI 中,能够间接将每一项监控指标配置值、理论应用状况对应到内存模型中进行直观的展现。在此基础上,能够更分明的理解到作业的运行状况、该如何调整、用哪些配置参数调整等 (社区也有相应的文档提供反对)。通过新的 Web UI,大家能更好的理解作业的应用状况,内存治理也更不便。 1. 本地内存(Managed Memory)Flink 托管内存实际上是 Flink 特有的一种本地内存,不受 JVM 和 GC 的治理,而是由 Flink 自行进行治理。 ...

July 16, 2021 · 5 min · jiezi

关于flink:实时数仓入门训练营实时计算-Flink-版-SQL-实践

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下同学们所遇到的痛点问题。由浅入深全方位解析实时数仓的架构、场景、以及实操利用,7 门精品课程帮忙你 5 天工夫从小白成长为大牛! 本文整顿自直播《实时计算 Flink 版 SQL 实际-李麟(海豹)》视频链接:https://c.tb.cn/F3.0dBssY 内容简要:一、实时计算Flink版SQL简介二、实时计算Flink版SQL上手示例三、开发常见问题和解法 实时计算Flink版SQL简介(一)对于实时计算Flink版SQL 实时计算Flink版抉择了SQL这种申明式语言作为顶层API,比较稳定,也不便用户应用。Flink SQL具备流批对立的个性,给用户对立的开发体验,并且语义统一。另外,Flink SQL可能主动优化,包含屏蔽流计算外面State的复杂性,也提供了主动优化的Plan,并且还集成了AutoPilot主动调优的性能。Flink SQL的利用场景也比拟宽泛,包含数据集成、实时报表、实时风控,还有在线机器学习等场景。 (二)基本操作 在基本操作上,能够看到SQL的语法和规范SQL十分相似。示例中包含了根本的SELECT、FILTER操作。,能够应用内置函数,如日期的格式化,也能够应用自定义函数,比方示例中的汇率转换就是一个用户自定义函数,在平台上注册后就能够间接应用。 (三)维表 Lookup Join在理论的数据处理过程中,维表的Lookup Join也是一个比拟常见的例子。 这里展现的是一个维表INNER JOIN示例。 例子中显示的SOURCE表是一个实时变动的订单信息表,它通过INNER JOIN去关联维表信息,这里标黄高亮的就是维表JOIN的语法,能够看到它和传统的批处理有一个写法上的差别,多了FOR SYSTEM_TIME AS OF这个子句来表明它是一个维表JOIN的操作。SOURCE表每来一条订单音讯,它都会触发维表算子,去做一次对维表信息的查问,所以把它叫做一个Lookup Join。 (四)Window AggregationWindow Aggregation(窗口聚合)操作也是常见的操作,Flink SQL中内置反对了几种罕用的Window类型,比方Tumble Window,Session Window,Hop Window,还有新引入的Cumulate Window。 Tumble Tumble Window能够了解成固定大小的工夫窗口,也叫滚窗,比如说5分钟、10分钟或者1个小时的固定距离的窗口,窗口之间没有重叠。 Session Session Window(会话窗口) 定义了一个间断事件的范畴,窗口定义中的一个参数叫做Session Gap,示意两条数据的距离如果超过定义的时长,那么前一个Window就完结了,同时生成了一个新的窗口。 Hop Hop Window不同于滚动窗口的窗口不重叠,滑动窗口的窗口之间能够重叠。滑动窗口有两个参数:size 和 slide。size 为窗口的大小,slide 为每次滑动的步长。如果slide < size,则窗口会重叠,同一条数据可能会被调配到多个窗口;如果 slide = size,则等同于 Tumble Window。如果 slide > size,窗口之间没有重叠且有间隙。 ...

July 15, 2021 · 2 min · jiezi

关于flink:实时数仓入门训练营基于-Apache-Flink-Hologres-的实时推荐系统架构解析

简介: 《实时数仓入门训练营》由阿里云研究员王峰、阿里云资深技术专家金晓军、阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打磨课程内容,直击当下同学们所遇到的痛点问题。由浅入深全方位解析实时数仓的架构、场景、以及实操利用,7 门精品课程帮忙你 5 天工夫从小白成长为大牛! 本文整顿自直播《基于 Apache Flink + Hologres 的实时举荐零碎架构解析-秦江杰》视频链接:https://c.tb.cn/F3.0d98Xr 摘要:本文由实时数仓线上课程秦江杰老师演讲内容整顿。 内容简要: 一、实时举荐零碎原理二、实时举荐零碎架构三、基于 Apache Flink + Hologres 的实时举荐零碎关键技术 实时举荐零碎原理(一)动态举荐零碎 在介绍实时举荐零碎之前,先看一下动态举荐零碎是什么样子的。 上方是一个十分经典的动态举荐零碎的架构图。前端会有很多用户端的利用,这些用户会产生大量用户的行为日志,而后放到一个音讯队列外面,进入ETL。接着通过离线零碎去做一些特色生成和模型训练,最初把模型和特色推到线上零碎中,通过在线的服务就能够去调用在线推理服务去取得举荐后果。这就是一个十分经典的动态举荐零碎运作流程,上面咱们举一个具体的例子来看动态举荐零碎到底是怎么样工作的。 如上图所示,比方在线用户的行为日志可能是一些用户的浏览和广告点击的日志,举荐零碎的目标是为了帮用户举荐广告,那么在日志外面能够看到以下用户行为: 用户1和用户2都看了PageID 200和一些其余的页面,而后用户1看了PageID 200并且点了广告2002,那么在用户日志外面通过ETL能够把这样的一系列行为给演绎进去,而后送到模型训练外面去训练模型。在训练模型的过程当中咱们会用到一些特色,在这个状况下咱们能够发现用户1和用户2都是中国的男性用户,这可能是用户维度的一个特色。 在这种状况下,咱们从日志外面看到的后果是用户在看了PageID 100后点了广告2002,并且两个用户都是中国的男性用户。因而,咱们的模型就有可能学到当中国的男性用户来看PageID 100的时候,应该要给他展现广告2002,这个行为会被训练到模型外面去。这个时候咱们会把一些用户的离线特色都推到特色库,而后把这个模型也推到线下来。 假如这里有一个用户ID4,他正好是中国的男性用户,这个特色就会被推动特色库,那模型也被推到线上。如果用户4来拜访的时候看PageID 100,推理服务会先去看用户ID4的特色,而后依据他是一个中国的男性用户,通过训练的模型,零碎就会给他推广告2002,这是一个动态举荐零碎根本的工作原理。 在这种状况下,如果产生一些变动的时候,咱们来看一下动态举荐零碎是不是可能持续很好地工作? 假使说明天训练了用户1和用户2的特色模型,到第二天发现用户4产生了行为,依据模型外面的内容,模型会认为用户4是中国的男性用户和用户1、用户2行为统一,所以须要给他推的应该是中国男性用户的行为。但这个时候咱们发现用户4的行为其实跟用户3更像,而不是跟用户1和用户2更像。 在这种状况下,因为模型和特色都是动态的,所以为了让用户4可能跟用户3失去的行为更像,须要去从新训练模型,这会导致预测的成果被提早,因为须要从新训练用户4,才可能举荐出跟用户3更像的一些行为。 所以在这种实际操作状况下,能够看到动态举荐模型存在一些问题: 动态生成模型和特色; 以分类模型为例,依据用户的相似性进行用户分类,假如同类用户有类似的趣味和行为 例如中国的男性用户有相似行为。 一旦用户被划分为某个类别,则他将始终处于这个类别中,直到被新的模型训练从新分类。 这种状况下,比拟难去做到很好的举荐,起因是: 用户的行为十分多元化,无奈划分到某个固定类别1)上午为父母洽购保健品,中午为出差订酒店,早晨给家人买衣服… 2)动态零碎无奈精确将用户放到过后当刻正确的类别中。 某一类别用户的行为类似,然而行为自身可能会发生变化1)假如用户“随大流“,然而“大流”可能发生变化; 2)历史数据看进去的“大流”可能无奈精确反映线上的真实情况。 (二)退出实时特色工程的举荐零碎为了解决上述问题,能够退出动静特色。那么动静特色是什么样的?举个例子阐明。 如上图所示,咱们以大流发生变化的动静特色举例。之前的模型举荐是如果中国的男性用户拜访PageID 100,就给他举荐广告2002,这是一个固定不变的行为。 在此基础上做一些变动,当进行采样实时特色的时候,这个实时特色是最近一段时间内,即当中国的男性用户拜访PageID 100的时候,他们点击最多的10个广告。这个特色没有方法在离线的时候计算出来,因为它是一个线上实时产生的用户行为。 那么在产生用户行为之后能够做一件什么事件呢?能够在中国的男性用户拜访PageID 100的时候,不单纯给他推广告2002,而是推最近这段时间中国男性用户拜访PageID 100时候点击最多的那些广告。 这样的状况下,如果中国男性用户拜访PageID 100的时候,最近拜访最多的广告是2001和2002。当用户ID来了,咱们看到他是一个中国男性用户,就有可能给他举荐广告2001,而不是广告2002了。 上述就是大流发生变化的一个例子。 同样的情理,因为零碎能够对用户的实时特色进行采样,所以能更好地判断用户过后当刻的用意。比方说,能够去看用户最近一分钟看了哪些页面,浏览哪些商品,这样的话能够实时判断用户过后当刻的想法,从而给他举荐一个更适宜他当下用意的广告。 这样的举荐零碎是不是就齐全没有问题呢?再看一个例子。 比方说方才上文提到用户1和用户2都是中国男性用户,之前假如他们的行为是相似的,在之前的历史数据外面也印证了这一点。然而当在线上真正看用户行为的时候,可能会产生什么样的状况? 可能产生用户1和用户2的行为产生分化,分化的起因可能有很多种,但不晓得是什么起因。此时给用户1和用户2所举荐的货色可能就齐全不一样了,那是什么起因导致分化了? 举个例子来说,如果用户1来自上海,用户2来自北京。某天北京有十分大的降温,这个时候北京用户2可能就开始搜寻秋裤,然而上海当天还是很热,上海的用户1在搜寻服装的时候,可能还是搜寻一些夏装。这个时候,中国的男性用户外面,上海用户1和北京用户2的搜寻行为就产生了一些变动。此时就须要给他们举荐不一样的广告,然而动态的模型没有方法很好地做到这一点。 因为这个模型其实是一个动态训练的模型,所以如果是一个分类模型的话,当中可能产生的类别其实是一个固定的类别,为了产生一个新的分类,就须要对模型从新进行训练。因为模型训练是离线进行的,所以可能这个训练的模型须要在第二天能力被更新,这样就会对举荐成果产生影响。 ...

July 15, 2021 · 2 min · jiezi

关于flink:Flink-Iceberg-对象存储构建数据湖方案

简介: 上海站 Flink Meetup 分享内容,如何基于Flink、对象存储、Iceberg 来构建数据湖生态。本文整顿自 Dell 科技团体高级软件研发经理孙伟在 4 月 17 日 上海站 Flink Meetup 分享的《Iceberg 和对象存储构建数据湖计划》,文章内容为: 数据湖和 Iceberg 简介对象存储撑持 Iceberg 数据湖演示计划存储优化的一些思考 一、数据湖和 Iceberg 简介1. 数据湖生态 如上图所示,对于一个成熟的数据湖生态而言: 首先咱们认为它底下应具备海量存储的能力,常见的有对象存储,私有云存储以及 HDFS;在这之上,也须要反对丰盛的数据类型,包含非结构化的图像视频,半结构化的 CSV、XML、Log,以及结构化的数据库表;除此之外,须要高效对立的元数据管理,使得计算引擎能够不便地索引到各种类型数据来做剖析。最初,咱们须要反对丰盛的计算引擎,包含 Flink、Spark、Hive、Presto 等,从而不便对接企业中已有的一些利用架构。2. 结构化数据在数据湖上的利用场景 上图为一个典型的数据湖上的利用场景。 数据源上可能会有各种数据,不同的数据源和不同格局。比如说事物数据,日志,埋点信息,IOT 等。这些数据通过一些流而后进入计算平台,这个时候它须要一个结构化的计划,把数据组织放到一个存储平台上,而后供后端的数据利用进行实时或者定时的查问。 这样的数据库计划它须要具备哪些特色呢? 首先,能够看到数据源的类型很多,因而须要反对比拟丰盛的数据 Schema 的组织;其次,它在注入的过程中要撑持实时的数据查问,所以须要 ACID 的保障,确保不会读到一些还没写完的中间状态的脏数据;最初,例如日志这些有可能长期须要改个格局,或者加一列。相似这种状况,须要防止像传统的数仓一样,可能要把所有的数据从新提出来写一遍,从新注入到存储;而是须要一个轻量级的解决方案来达成需要。Iceberg 数据库的定位就在于实现这样的性能,于上对接计算平台,于下对接存储平台。 3. 结构化数据在数据湖上的典型解决方案 对于数据结构化组织,典型的解决形式是用数据库传统的组织形式。 如上图所示,上方有命名空间,数据库表的隔离;两头有多个表,能够提供多种数据 Schema 的保留;底下会放数据,表格须要提供 ACID 的个性,也反对部分 Schema 的演进。 4. Iceberg 表数据组织架构 快照 Metadata:表格 Schema、Partition、Partition spec、Manifest List 门路、以后快照等。Manifest List:Manifest File 门路及其 Partition,数据文件统计信息。Manifest File:Data File 门路及其每列数据高低边界。Data File:理论表内容数据,以 Parque,ORC,Avro 等格局组织。接下来具体看一下 Iceberg 是如何将数据组织起来的。如上图所示: ...

July 15, 2021 · 3 min · jiezi

关于Flink:Flink实时数仓数据采集层

一、电商实时数仓介绍1.1、一般实时计算与实时数仓比拟 一般的实时计算优先思考时效性,所以从数据源采集通过实时计算间接失去后果。如此做时效性更好,然而弊病是因为计算过程中的两头后果没有积淀下来,所以当面对大量实时需要的时候,计算的复用性较差,开发成本随着需要减少直线回升。 实时数仓基于肯定的数据仓库理念,对数据处理流程进行布局、分层,目标是进步数据的复用性。 1.2 实时电商数仓,我的项目分为以下几层➢ ODS 原始数据,日志和业务数据➢ DWD 依据数据对象为单位进行分流,比方订单、页面拜访等等➢ DIM 维度数据➢ DWM 对于局部数据对象进行进一步加工,比方独立拜访、跳出行为,也能够和维度进行关联,造成宽表,仍旧是明细数据。➢ DWS 依据某个主题将多个事实数据轻度聚合,造成主题宽表。➢ ADS 把 Clickhouse 中的数据依据可视化须要进行筛选聚合二、实时需要概览2.1 离线计算与实时计算的比拟离线计算:就是在计算开始前已知所有输出数据,输出数据不会产生变动,个别计算量级较大,计算工夫也较长。例如明天早上一点,把昨天累积的日志,计算出所需后果。最经典的就是 MR/Spark/Hive; 个别是依据前一日的数据生成报表,尽管统计指标、报表繁多,然而对时效性不敏感。从技术操作的角度,这部分属于批处理的操作。即依据确定范畴的数据一次性计算。 实时计算:输出数据是能够以序列化的形式一个个输出并进行解决的,也就是说在开始的时候并不需要晓得所有的输出数据。与离线计算相比,运行工夫短,计算量级绝对较小。强调计算过程的工夫要短,即所查当下给出后果。 次要侧重于对当日数据的实时监控,通常业务逻辑绝对离线需要简略一下,统计指标也少一些,然而更重视数据的时效性,以及用户的交互性。从技术操作的角度,这部分属于流解决的操作。依据数据源源不断地达到进行实时的运算。 2.2 实时需要品种2.2.1 日常统计报表或剖析图中须要蕴含当日局部 对于日常企业、网站的经营治理如果仅仅依附离线计算,数据的时效性往往无奈满足。通过实时计算取得当日、分钟级、秒级甚至亚秒的数据更加便于企业对业务进行快速反应与调整。 所以实时计算结果往往要与离线数据进行合并或者比照展现在 BI 或者统计平台中 2.2.2 实时数据大屏监控 数据大屏,绝对于 BI 工具或者数据分析平台是更加直观的数据可视化形式。尤其是一些大促流动,曾经成为必备的一种营销伎俩。 另外还有一些非凡行业,比方交通、电信的行业,那么大屏监控简直是必备的监控伎俩。 2.2.3 数据预警或提醒 通过大数据实时计算失去的一些风控预警、营销信息提醒,可能疾速让风控或营销局部失去信息,以便采取各种应答。 比方,用户在电商、金融平台中正在进行一些非法或欺诈类操作,那么大数据实时计算能够疾速的将状况筛选进去发送风控部门进行解决,甚至主动屏蔽。 或者检测到用户的行为对于某些商品具备较强的购买志愿,那么能够把这些“商机”推送给客服部门,让客服进行被动的跟进。 2.2.4 实时举荐零碎 实时举荐就是依据用户的本身属性联合以后的拜访行为,通过实时的举荐算法计算,从而将用户可能喜爱的商品、新闻、视频等推送给用户。 这种零碎个别是由一个用户画像批处理加一个用户行为剖析的流解决组合而成。 三、统计架构剖析3.1 离线架构 3.2、实时架构 关注我的公众号【宝哥大数据】, 更多干货

July 14, 2021 · 1 min · jiezi

关于Flink:Flink-Iceberg-对象存储构建数据湖方案

本文整顿自 Dell 科技团体高级软件研发经理孙伟在 4 月 17 日 上海站 Flink Meetup 分享的《Iceberg 和对象存储构建数据湖计划》,文章内容为: 数据湖和 Iceberg 简介对象存储撑持 Iceberg 数据湖演示计划存储优化的一些思考一、数据湖和 Iceberg 简介1. 数据湖生态 如上图所示,对于一个成熟的数据湖生态而言: 首先咱们认为它底下应具备海量存储的能力,常见的有对象存储,私有云存储以及 HDFS;在这之上,也须要反对丰盛的数据类型,包含非结构化的图像视频,半结构化的 CSV、XML、Log,以及结构化的数据库表;除此之外,须要高效对立的元数据管理,使得计算引擎能够不便地索引到各种类型数据来做剖析。最初,咱们须要反对丰盛的计算引擎,包含 Flink、Spark、Hive、Presto 等,从而不便对接企业中已有的一些利用架构。2. 结构化数据在数据湖上的利用场景 上图为一个典型的数据湖上的利用场景。 数据源上可能会有各种数据,不同的数据源和不同格局。比如说事物数据,日志,埋点信息,IOT 等。这些数据通过一些流而后进入计算平台,这个时候它须要一个结构化的计划,把数据组织放到一个存储平台上,而后供后端的数据利用进行实时或者定时的查问。 这样的数据库计划它须要具备哪些特色呢? 首先,能够看到数据源的类型很多,因而须要反对比拟丰盛的数据 Schema 的组织;其次,它在注入的过程中要撑持实时的数据查问,所以须要 ACID 的保障,确保不会读到一些还没写完的中间状态的脏数据;最初,例如日志这些有可能长期须要改个格局,或者加一列。相似这种状况,须要防止像传统的数仓一样,可能要把所有的数据从新提出来写一遍,从新注入到存储;而是须要一个轻量级的解决方案来达成需要。Iceberg 数据库的定位就在于实现这样的性能,于上对接计算平台,于下对接存储平台。 3. 结构化数据在数据湖上的典型解决方案 对于数据结构化组织,典型的解决形式是用数据库传统的组织形式。 如上图所示,上方有命名空间,数据库表的隔离;两头有多个表,能够提供多种数据 Schema 的保留;底下会放数据,表格须要提供 ACID 的个性,也反对部分 Schema 的演进。 4. Iceberg 表数据组织架构 快照 Metadata:表格 Schema、Partition、Partition spec、Manifest List 门路、以后快照等。Manifest List:Manifest File 门路及其 Partition,数据文件统计信息。Manifest File:Data File 门路及其每列数据高低边界。Data File:理论表内容数据,以 Parque,ORC,Avro 等格局组织。接下来具体看一下 Iceberg 是如何将数据组织起来的。如上图所示: 能够看到左边从数据文件开始,数据文件寄存表内容数据,个别反对 Parquet、ORC、Avro 等格局;往上是 Manifest File,它会记录底下数据文件的门路以及每列数据的高低边界,不便过滤查问文件;再往上是 Manifest List,它来链接底下多个 Manifest File,同时记录 Manifest File 对应的分区范畴信息,也是为了不便后续做过滤查问; ...

July 14, 2021 · 3 min · jiezi

关于Flink:Flink-113State-Backend-优化及生产实践分享

本文由社区志愿者佳伟整顿,唐云(茶干) 在 5 月 22 日北京站 Flink Meetup 分享的 《State Backend Flink – 1.13 优化及生产实践分享》。内容包含: 鸟瞰 Flink 1.13 state-backend 变动RocksDB state-backend 内存管控优化Flink state-backend 模块倒退布局一、鸟瞰 Flink 1.13 state-backend 变动1. State 拜访的性能监控首先,Flink 1.13 中引入了 State 拜访的性能监控,即 latency trackig state。 通过对每次拜访前后的 System#nanoTime 求差,失去 state 拜访提早值(latency)。此性能不局限于 State Backend 的类型,自定义实现的 State Backend 也能够复用此性能。State 拜访的性能监控会产生肯定的性能影响,所以,默认每 100 次做一次取样 (sample)。上图即监控后果展现。 State 拜访的性能监控开启后,对不同的 State Backend 性能损失影响不同: 对于 RocksDB State Backend, 性能损失大略在 1% 左右;而对于 Heap State Backend, 性能损失最多可达 10%。 ...

July 1, 2021 · 3 min · jiezi

关于flink:Flink-113面向流批一体的运行时与-DataStream-API-优化

本文由社区志愿者苗文婷整顿,内容起源自阿里巴巴技术专家高赟(云骞) 在 5 月 22 日北京站 Flink Meetup 分享的《面向流批一体的 Flink 运行时与 DataStream API 优化》。文章次要分为 4 个局部: 回顾 Flink 流批一体的设计介绍针对运行时的优化点介绍针对 DataStream API 的优化点总结以及后续的一些布局。1. 流批一体的 Flink1.1 架构介绍首先看下 Flink 流批一体的整体逻辑。Flink 在晚期的时候,尽管是一个能够同时反对流解决和批处理的框架,然而它的流解决和批处理的实现,不论是在 API 层,还是在底下的 Shuffle、调度、算子层,都是独自的两套。这两套实现是齐全独立的,没有特地严密的关联。 在流批一体这一指标的疏导下,Flink 当初曾经对底层的算子、调度、Shuffle 进行了对立的形象,以对立的形式向上反对 DataStream API 和 Table API 两套接口。DataStream API 是一种比拟偏物理层的接口,Table API 是一种 Declearetive 的接口,这两套接口对流和批来说都是对立的。 1.2 长处 代码复用 基于 DataStream API 和 Table API,用户能够写同一套代码来同时解决历史的数据和实时的数据,例如数据回流的场景。 易于开发 对立的 Connector 和算子实现,缩小开发和保护的老本。 易于学习 缩小学习老本,防止学习两套类似接口。 易于保护 应用同一零碎反对流作业和批作业,缩小保护老本。 1.3 数据处理过程上面简略介绍 Flink 是怎么形象流批一体的,Flink 把作业拆成了两种: ...

July 1, 2021 · 3 min · jiezi

关于flink:深入解读-Flink-SQL-113

简介: Apache Flink 社区 5 月 22 日北京站 Meetup 分享内容整顿,深刻解读 Flink SQL 1.13 中 5 个 FLIP 的实用更新和重要改良。本文由社区志愿者陈政羽整顿,Apache Flink 社区在 5 月份公布了 1.13 版本,带来了很多新的变动。文章整顿自徐榜江(雪尽) 5 月 22 日在北京的 Flink Meetup 分享的《深刻解读 Flink SQL 1.13》,内容包含: Flink SQL 1.13 概览外围 feature 解读重要改良解读Flink SQL 1.14 将来布局总结 一、Flink SQL 1.13 概览 Flink 1.13 是一个社区大版本,解决的 issue 在 1000 个以上,通过上图咱们能够看到,解决的问题大部分是对于 Table/SQL 模块,一共 400 多个 issue 占了总体的 37% 左右。这些 issue 次要围绕了 5 个 FLIP 开展,在本文中咱们也会依据这 5 个方面进行介绍,它们别离是: ...

July 1, 2021 · 4 min · jiezi

关于flink:FlinkHologres亿级用户实时UV精确去重最佳实践

简介:Flink+Hologres亿级用户实时UV准确去重最佳实际 UV、PV计算,因为业务需要不同,通常会分为两种场景: • 离线计算场景:以T+1为主,计算历史数据• 实时计算场景:实时计算日常新增的数据,对用户标签去重 针对离线计算场景,Hologres基于RoaringBitmap,提供超高基数的UV计算,只需进行一次最细粒度的预聚合计算,也只生成一份最细粒度的预聚合后果表,就能达到亚秒级查问。具体详情能够参见往期文章>>Hologres如何反对超高基数UV计算(基于RoaringBitmap实现) 对于实时计算场景,能够应用Flink+Hologres形式,并基于RoaringBitmap,实时对用户标签去重。这样的形式,能够较细粒度的实时失去用户UV、PV数据,同时便于依据需要调整最小统计窗口(如最近5分钟的UV),实现相似实时监控的成果,更好的在大屏等BI展现。相较于以天、周、月等为单位的去重,更适宜在流动日期进行更细粒度的统计,并且通过简略的聚合,也能够失去较大工夫单位的统计后果。 主体思维Flink将流式数据转化为表与维表进行JOIN操作,再转化为流式数据。此举能够利用Hologres维表的insertIfNotExists个性联合自增字段实现高效的uid映射。Flink把关联的后果数据依照工夫窗口进行解决,依据查问维度应用RoaringBitmap进行聚合,并将查问维度以及聚合的uid寄存在聚合后果表,其中聚合出的uid后果放入Hologres的RoaringBitmap类型的字段中。查问时,与离线形式类似,间接依照查问条件查问聚合后果表,并对其中要害的RoaringBitmap字段做or运算后并统计基数,即可得出对应用户数。解决流程如下图所示 计划最佳实际1.创立相干根底表1)创立表uid_mapping为uid映射表,用于映射uid到32位int类型。 • RoaringBitmap类型要求用户ID必须是32位int类型且越浓密越好(即用户ID最好间断)。常见的业务零碎或者埋点中的用户ID很多是字符串类型或Long类型,因而须要应用uid_mapping类型构建一张映射表。映射表利用Hologres的SERIAL类型(自增的32位int)来实现用户映射的主动治理和稳固映射。 • 因为是实时数据, 设置该表为行存表,以进步Flink维表实时JOIN的QPS。 BEGIN;CREATE TABLE public.uid_mapping (uid text NOT NULL,uid_int32 serial,PRIMARY KEY (uid));--将uid设为clustering_key和distribution_key便于疾速查找其对应的int32值CALL set_table_property('public.uid_mapping', 'clustering_key', 'uid');CALL set_table_property('public.uid_mapping', 'distribution_key', 'uid');CALL set_table_property('public.uid_mapping', 'orientation', 'row');COMMIT;2)创立表dws_app为根底聚合表,用于寄存在根底维度上聚合后的后果。 • 应用RoaringBitmap前须要创立RoaringBitmap extention,同时也须要Hologres实例为0.10版本 CREATE EXTENSION IF NOT EXISTS roaringbitmap;• 为了更好性能,倡议依据根底聚合表数据量正当的设置Shard数,但倡议根底聚合表的Shard数设置不超过计算资源的Core数。举荐应用以下形式通过Table Group来设置Shard数 --新建shard数为16的Table Group,--因为测试数据量百万级,其中后端计算资源为100core,设置shard数为16BEGIN;CREATE TABLE tg16 (a int); --Table Group哨兵表call set_table_property('tg16', 'shard_count', '16'); COMMIT;• 相比离线后果表,此后果表减少了工夫戳字段,用于实现以Flink窗口周期为单位的统计。后果表DDL如下: BEGIN;create table dws_app( country text, prov text, city text, ymd text NOT NULL, --日期字段 timetz TIMESTAMPTZ, --统计工夫戳,能够实现以Flink窗口周期为单位的统计 uid32_bitmap roaringbitmap, -- 应用roaringbitmap记录uv primary key(country, prov, city, ymd, timetz)--查问维度和工夫作为主键,避免反复插入数据);CALL set_table_property('public.dws_app', 'orientation', 'column');--日期字段设为clustering_key和event_time_column,便于过滤CALL set_table_property('public.dws_app', 'clustering_key', 'ymd');CALL set_table_property('public.dws_app', 'event_time_column', 'ymd');--等价于将表放在shard数为16的table groupcall set_table_property('public.dws_app', 'colocate_with', 'tg16');--group by字段设为distribution_keyCALL set_table_property('public.dws_app', 'distribution_key', 'country,prov,city');COMMIT;2.Flink实时读取数据并更新dws_app根底聚合表残缺示例源码请见alibabacloud-hologres-connectors examples ...

June 28, 2021 · 3 min · jiezi

关于Flink:深入解读-Flink-SQL-113

本文由社区志愿者陈政羽整顿,Apache Flink 社区在 5 月份公布了 1.13 版本,带来了很多新的变动。文章整顿自徐榜江(雪尽) 5 月 22 日在北京的 Flink Meetup 分享的《深刻解读 Flink SQL 1.13》,内容包含: Flink SQL 1.13 概览外围 feature 解读重要改良解读Flink SQL 1.14 将来布局总结一、Flink SQL 1.13 概览 Flink 1.13 是一个社区大版本,解决的 issue 在 1000 个以上,通过上图咱们能够看到,解决的问题大部分是对于 Table/SQL 模块,一共 400 多个 issue 占了总体的 37% 左右。这些 issue 次要围绕了 5 个 FLIP 开展,在本文中咱们也会依据这 5 个方面进行介绍,它们别离是: 上面咱们对这些 FLIP 进行具体解读。 二、 外围 feature 解读1. FLIP-145:反对 Window TVF社区的小伙伴应该理解,在腾讯、阿里巴巴、字节跳动等公司的外部分支曾经开发了这个性能的根底版本。这次 Flink 社区也在 Flink 1.13 推出了 TVF 的相干反对和优化。上面将从 Window TVF 语法、近实时累计计算场景、 Window 性能优化、多维数据分析,来剖析这个新性能。 ...

June 28, 2021 · 4 min · jiezi

关于flink:带你认识Flink容错机制的两大方面作业执行和守护进程

摘要:Flink 容错机制次要有作业执行的容错以及守护过程的容错两方面,前者包含 Flink runtime 的 ExecutionGraph 和Execution的容错,后者则包含 JobManager 和 TaskManager 的容错。本文分享自华为云社区《Flink容错机制》,原文作者:yangxiao_mrs 。 Flink 容错机制次要有作业执行的容错以及守护过程的容错两方面,前者包含 Flink runtime 的 ExecutionGraph 和Execution的容错,后者则包含 JobManager 和 TaskManager 的容错。 一、作业执行容错Flink 的谬误复原机制分为多个级别,即 Execution 级别的 Failover 策略和 ExecutionGraph 级别的 Job Restart 策略。当呈现谬误时,Flink 会先尝试触发范畴小的谬误复原机制,如果仍解决不了才会降级为更大范畴的谬误复原机制,具体能够看上面的序列图。 当 Task 产生谬误,TaskManager 会通过 RPC 告诉 JobManager,后者将对应 Execution 的状态转为 failed 并触发 Failover 策略。如果合乎 Failover 策略,JobManager 会重启 Execution,否则降级为 ExecutionGraph 的失败。ExecutionGraph 失败则进入 failing 的状态,由 Restart 策略决定其重启(restarting 状态)还是异样退出(failed 状态)。 1.1 Task Failover策略Task Failover策略目前有三个,别离是:RestartAll、RestartIndividualStrategy 和 RestartPipelinedRegionStrategy。 RestartAll: 重启全副 Task,是复原作业一致性的最安全策略,会在其余 Failover 策略失败时作为保底策略应用。目前是默认的 Task Failover 策略。 ...

June 26, 2021 · 2 min · jiezi

关于flink:唯品会在-Flink-容器化与平台化上的建设实践

简介: 唯品会 Flink 的容器化实际利用,Flink SQL 平台化建设,以及在实时数仓和试验平台上的利用案例。 转自dbaplus社群公众号 作者:王康,唯品会数据平台高级开发工程师 自 2017 年起,为保障外部业务在平时和大促期间的安稳运行,唯品会就开始基于 Kubernetes 深刻打造高性能、稳固、牢靠、易用的实时计算平台,当初的平台反对 Flink、Spark、Storm 等支流框架。 本文将分为五个方面,分享唯品会 Flink 的容器化实际利用以及产品化教训: 倒退概览Flink 容器化实际Flink SQL 平台化建设利用案例将来布局一、倒退概览1、集群规模 在集群规模方面,咱们有 2000+ 的物理机,次要部署 Kubernetes 异地双活的集群,利用 Kubernetes 的 namespaces,labels 和 taints 等实现业务隔离以及初步的计算负载隔离。 Flink 工作数、Flink SQL 工作数、Storm 工作数、Spark 工作数,这些线上实时利用加起来有 1000 多个。目前咱们次要反对 Flink SQL 这一块,因为 SQL 化是一个趋势,所以咱们要反对 SQL 工作的上线平台。 2、平台架构 咱们从下往上进行解析实时计算平台的整体架构: 资源调度层(最底层)实际上是用 deployment 的模式运行 Kubernetes 上,平台尽管反对 yarn 调度,然而 yarn 调度与批工作共享资源,所以支流工作还是运行在 Kubernetes 上的。并且,yarn 调度这一层次要是离线部署的一套 yarn 集群。在 2017 年的时候,咱们自研了 Flink on Kubernetes 的一套计划,因为底层调度分了两层,所以在大促资源缓和的时候,实时跟离线就能够做一个资源的借调。 ...

June 24, 2021 · 5 min · jiezi

关于flink:Flink-常用-API-详解

@[TOC] <font color=red size=50> 还有视频解说在我的B站-宝哥chbxw, 心愿大家能够反对一下,谢谢。</font> 前言之分层 APIFlink 依据形象水平分层,提供了三种不同的 API。每一种 API 在简洁性和表达力上有着不同的偏重,并且针对不同的利用场景。 ProcessFunction 是 Flink 所提供最底层接口。ProcessFunction 能够解决一或两条输出数据流中的单个事件或者纳入一个特定窗口内的多个事件。它提供了对于工夫和状态的细粒度管制。开发者能够在其中任意地批改状态,也可能注册定时器用以在将来的某一时刻触发回调函数。因而,你能够利用 ProcessFunction 实现许多有状态的事件驱动利用所须要的基于单个事件的简单业务逻辑。DataStream API 为许多通用的流解决操作提供了解决原语。这些操作包含窗口、逐条记录的转换操作,在处理事件时进行内部数据库查问等。DataStream API 反对 Java 和Scala 语言,事后定义了例如 map()、reduce()、aggregate() 等函数。你能够通过扩大实现预约义接口或应用 Java、Scala 的 lambda 表达式实现自定义的函数。SQL & Table API:Flink 反对两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流解决对立的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型 API 会以雷同的语义执行查问,并产生雷同的后果。Table API 和 SQL借助了 Apache Calcite 来进行查问的解析,校验以及优化。它们能够与 DataStream 和DataSet API 无缝集成,并反对用户自定义的标量函数,聚合函数以及表值函数。扩大库 简单事件处理(CEP):模式检测是事件流解决中的一个十分常见的用例。Flink 的 CEP库提供了 API,使用户可能以例如正则表达式或状态机的形式指定事件模式。CEP 库与Flink 的 DataStream API 集成,以便在 DataStream 上评估模式。CEP 库的利用包含网络入侵检测,业务流程监控和欺诈检测。DataSet API:DataSet API 是 Flink 用于批处理应用程序的外围 API。DataSet API 所提供的根底算子包含 map、reduce、(outer) join、co-group、iterate 等。所有算子都有相应的算法和数据结构反对,对内存中的序列化数据进行操作。如果数据大小超过预留内存,则适量数据将存储到磁盘。Flink 的 DataSet API 的数据处理算法借鉴了传统数据库算法的实现,例如混合散列连贯(hybrid hash-join)和内部归并排序(external merge-sort)。Gelly: Gelly 是一个可扩大的图形处理和剖析库。Gelly 是在 DataSet API 之上实现的,并与 DataSet API 集成。因而,它可能受害于其可扩大且强壮的操作符。Gelly 提供了内置算法,如 label propagation、triangle enumeration 和 page rank 算法,也提供了一个简化自定义图算法实现的 Graph API。一、DataStream 的编程模型DataStream 的编程模型包含四个局部:Environment,DataSource,Transformation,Sink。 ...

June 23, 2021 · 9 min · jiezi

关于flink:唯品会在-Flink-容器化与平台化上的建设实践

转自dbaplus社群公众号作者:王康,唯品会数据平台高级开发工程师 自 2017 年起,为保障外部业务在平时和大促期间的安稳运行,唯品会就开始基于 Kubernetes 深刻打造高性能、稳固、牢靠、易用的实时计算平台,当初的平台反对 Flink、Spark、Storm 等支流框架。 本文将分为五个方面,分享唯品会 Flink 的容器化实际利用以及产品化教训: 倒退概览Flink 容器化实际Flink SQL 平台化建设利用案例将来布局一、倒退概览1、集群规模 在集群规模方面,咱们有 2000+ 的物理机,次要部署 Kubernetes 异地双活的集群,利用 Kubernetes 的 namespaces,labels 和 taints 等实现业务隔离以及初步的计算负载隔离。 Flink 工作数、Flink SQL 工作数、Storm 工作数、Spark 工作数,这些线上实时利用加起来有 1000 多个。目前咱们次要反对 Flink SQL 这一块,因为 SQL 化是一个趋势,所以咱们要反对 SQL 工作的上线平台。 2、平台架构 咱们从下往上进行解析实时计算平台的整体架构: 资源调度层(最底层)实际上是用 deployment 的模式运行 Kubernetes 上,平台尽管反对 yarn 调度,然而 yarn 调度与批工作共享资源,所以支流工作还是运行在 Kubernetes 上的。并且,yarn 调度这一层次要是离线部署的一套 yarn 集群。在 2017 年的时候,咱们自研了 Flink on Kubernetes 的一套计划,因为底层调度分了两层,所以在大促资源缓和的时候,实时跟离线就能够做一个资源的借调。 存储层次要用来反对公司外部基于 Kafka 的实时数据 vms,基于 binlog 的 vdp 数据和原生 Kafka 作为音讯总线,状态存储在 HDFS 上,数据次要存入 Redis、MySQL、HBase、Kudu、HDFS、ClickHouse 等。 ...

June 22, 2021 · 5 min · jiezi

关于flink:Flink-和-Iceberg-如何解决数据入湖面临的挑战

一、数据入湖的外围挑战数据实时入湖能够分成三个局部,别离是数据源、数据管道和数据湖(数仓),本文的内容将围绕这三局部开展。 1. Case #1:程序 BUG 导致数据传输中断 首先,当数据源通过数据管道传到数据湖(数仓)时,很有可能会遇到作业有 BUG 的状况,导致数据传到一半,对业务造成影响;第二个问题是当遇到这种状况的时候,如何重起作业,并保证数据不反复也不缺失,残缺地同步到数据湖(数仓)中。2. Case #2:数据变更太苦楚数据变更 当产生数据变更的状况时,会给整条链路带来较大的压力和挑战。以下图为例,原先是一个表定义了两个字段,别离是 ID 和 NAME。此时,业务方面的同学示意须要将地址加上,以不便更好地开掘用户的价值。 首先,咱们须要把 Source 表加上一个列 Address,而后再把到 Kafka 两头的链路加上链,而后批改作业并重启。接着整条链路得一路改过去,增加新列,批改作业并重启,最初把数据湖(数仓)里的所有数据全副更新,从而实现新增列。这个过程的操作不仅耗时,而且会引入一个问题,就是如何保证数据的隔离性,在变更的过程中不会对剖析作业的读取造成影响。 分区变更 如下图所示,数仓外面的表是以 “月” 为单位进行分区,当初心愿改成以 “天” 为单位做分区,这可能就须要将很多零碎的数据全副更新一遍,而后再用新的策略进行分区,这个过程非常耗时。 3. Case #3:越来越慢的近实时报表?当业务须要更加近实时的报表时,须要将数据的导入周期,从 “天” 改到 “小时”,甚至 “分钟” 级别,这可能会带来一系列问题。 如上图所示,首先带来的第一个问题是:文件数以肉眼可见的速度增长,这将对里面的零碎造成越来越大的压力。压力次要体现在两个方面: 第一个压力是,启动剖析作业越来越慢,Hive Metastore 面临扩大难题,如下图所示。 随着小文件越来越多,应用中心化的 Metastore 的瓶颈会越来越重大,这会造成启动剖析作业越来越慢,因为启动作业的时候,会把所有的小文件原数据都扫一遍。第二是因为 Metastore 是中心化的零碎,很容易碰到 Metastore 扩大难题。例如 Hive,可能就要想方法扩前面的 MySQL,造成较大的保护老本和开销。第二个压力是扫描剖析作业越来越慢。 随着小文件减少,在剖析作业起来之后,会发现扫描的过程越来越慢。实质是因为小文件大量减少,导致扫描作业在很多个 Datanode 之间频繁切换。 4. Case #4:实时地剖析 CDC 数据很艰难大家调研 Hadoop 里各种各样的零碎,发现整个链路须要跑得又快又好又稳固,并且有好的并发,这并不容易。 首先从源端来看,比方要将 MySQL 的数据同步到数据湖进行剖析,可能会面临一个问题,就是 MySQL 外面有存量数据,前面如果一直产生增量数据,如何完满地同步全量和增量数据到数据湖中,保证数据不多也不少。 ...

June 22, 2021 · 2 min · jiezi

关于flink:数栈技术分享开源数栈扩展FlinkSQL实现流与维表的join

一、扩大FlinkSQL实现流与维表的join 二、为什么要扩大FlinkSQL? 1、实时计算须要齐全SQL化 SQL是数据处理中应用最宽泛的语言。它容许用户简明扼要地申明他们的业务逻辑。大数据批计算应用SQL很常见,然而反对SQL的实时计算并不多。其实,用SQL开发实时工作能够极大升高数据开发的门槛,在袋鼠云数栈-实时计算模块,咱们决定实现齐全SQL化。 数据计算采纳SQL的劣势 ☑ 申明式。用户只须要表白我想要什么,至于怎么计算那是零碎的事件,用户不必关怀。 ☑ 主动调优。查问优化器能够为用户的 SQL 生成最有的执行打算。用户不须要理解它,就能主动享受优化器带来的性能晋升。 ☑ 易于了解。很多不同行业不同畛域的人都懂 SQL,SQL 的学习门槛很低,用 SQL 作为跨团队的开发语言能够很大地提高效率。 ☑ 稳固。SQL 是一个领有几十年历史的语言,是一个十分稳固的语言,很少有变动。所以当咱们降级引擎的版本时,甚至替换成另一个引擎,都能够做到兼容地、平滑地降级。 参考链接:https://blog.csdn.net/weixin_... 2、实时计算还须要流与维表的JOIN 在实时计算的世界里不只是流与流的JOIN,还须要流与维表的JOIN。在去年,袋鼠云数栈V3.0版本研发期间,过后最新版本——flink1.6中FlinkSQL,曾经将SQL的劣势利用到Flink引擎中,但还未反对流与维表的JOIN。 FlinkSQL于2017年7月开始面向阿里巴巴团体凋谢流计算服务的,尽管是一个十分年老的产品,然而到双11期间曾经撑持了数千个作业,在双11期间,Blink 作业的解决峰值达到了5+亿每秒,而其中仅 Flink SQL 作业的解决总峰值就达到了3亿/秒。 参考链接:https://yq.aliyun.com/article... 里先解释下什么是维表;维表是动静表,表里所存储的数据有可能不变,也有可能定时更新,然而更新频率不是很频繁。在业务开发中个别的维表数据存储在关系型数据库如mysql,oracle等,也可能存储在hbase,redis等nosql数据库。 三、FlinkSQL实现流与维表的join分步走 1、用Flink api实现维表的性能 要实现维表性能就要用到 Flink Aysnc I/O 这个性能,是由阿里巴巴奉献给Apache Flink的。 Async I/O 是由阿里巴巴奉献给社区的,于1.2版本引入,次要目标是为了解决与内部零碎交互时网络提早成为了零碎瓶颈的问题。 具体介绍能够看这篇文章:http://wuchong.me/blog/2017/0... 对应到Flink 的api就是RichAsyncFunction 这个抽象类,继层这个抽象类实现外面的open(初始化),asyncInvoke(数据异步调用),close(进行的一些操作)办法,最次要的是实现asyncInvoke 外面的办法。 流与维表的join会碰到两个问题: 1)第一个是性能问题。 因为流速要是很快,每一条数据都须要到维表做下join,然而维表的数据是存在第三方存储系统,如果实时拜访第三方存储系统,不仅join的性能会差,每次都要走网络io;还会给第三方存储系统带来很大的压力,有可能会把第三方存储系统搞挂掉。 所以解决的办法就是维表里的数据要缓存,能够全量缓存,这个次要是维表数据不大的状况,还有一个是LRU缓存,维表数据量比拟大的状况。 2)第二个问题是流提早过去的数据这么跟之前的维表数据做关联。 这个就波及到维表数据须要存储快照数据,所以这样的场景用HBase 做维表是比拟适宜的,因为HBase 是天生反对数据多版本的。 2、解析流与维表join的SQL语法转化成底层的FlinkAPI 因为FlinkSQL曾经做了大部分SQL场景,咱们不可能在去解析SQL的所有语法,在把他转化成底层FlinkAPI。 所以咱们做的就是解析SQL语法,来找到join表里有没有维表,如果有维表,那咱们会把这个join的维表的语句独自拆来,用Flink的TableAPI和StreamAPi 生成新DataStream,在把这个DataStream与其余的表在做join这样就能用SQL来实现流与维表的join语法了。 SQL解析的工具就是用Apache calcite,Flink也是用这个框架做SQL解析的。所以所有语法都是能够解析的。 1)DEMO SQL insert into ...

June 18, 2021 · 1 min · jiezi

关于flink:Apache-Flink-Meetup-710-北京站Flink-x-TiDB-专场等你来

Flink,近年来广受欢迎,是最受认可的大数据计算引擎之一;TiDB 作为开源的 NewSQL 数据库也以其优良的横向扩大能力和高可用特点,颇受业界的好评。那么当 Flink 遇上 TiDB,会迸发出怎么的火花呢? Apache Flink 社区 Meetup 北京站又来啦 7月10日 | 北京 | 线下 Flink x TiDB 专场 本场 Meetup 将由 Flink 社区与 TiDB 社区合办。判若两人,咱们邀请了各行业的技术大牛,来自阿里巴巴、TiDB、360、知乎、网易的 5 位技术专家将围绕 Flink 和 TiDB,分享如何实现精确稳固的实时计算业务、如何搭建实时数仓数据链路的最佳实际、如何利用两者的特点实现端对端实时计算的闭环交付,以及 Flink SQL 和 Flink-CDC 架构的感悟与实际等。 ■ 流动亮点超多实用干货,Flink + TiDB 的结合能擦出怎么的火花,且看各位技术专家聚焦实时数据业务撑持、实时数仓、端到端实时计算等场景,用实践联合实际解析 Flink + TiDB 在各场景的利用。 流动模式多样化,线下线上同步开启,同城可参加线下 Meetup 面对面交换,异地也可在线观看直播,精彩内容不错过; 丰盛周边等你拿,报名加入就有机会取得超多 Flink 社区定制的精美周边! 特地鸣谢 360 提供场地 ■ 流动议程 ▼ 立刻报名 ▼Apache Flink x TiDB Meetup · 北京站http://hdxu.cn/kF2ua 一、 嘉宾及议题介绍 ...

June 18, 2021 · 2 min · jiezi

关于Flink:FlinkHologres助力伊的家电商平台建设新一代实时数仓

广州伊的家网络科技有限公司是一家专一于服务女性的B2B2C电商平台,业务范围包含护肤、彩妆、养分美容食品、私人定制服装、跨境电商等畛域。自2008年孵化我的项目,2011年5月上线天猫商城,全国8大配送核心,妍诗美、妍膳等品牌陆续成立,并于2013年上线了伊的家自主电商平台,2020年全面启动品牌降级。伊的家以互联网主动式服务营销,打造护肤老师与客户强连贯关系,从上到下严格贯彻以品质及业余为根底,以社交信赖做连贯,以服务取得认可的经营思路,通过继续的翻新和积攒,成为社交电商翘楚。 业务场景与痛点剖析伊的家是一家集开发、设计、经营、销售于一体一个B2B2B的电商平台,服务百万级会员之外,还同时反对上千级别经销商和代理商,业务利用多、数据量大、数据查问并发要求高。 伊的家技术部门在近3年经验了高速倒退,在倒退过程中,始终保持业务优先,为此也进行了利用整合、拆分微服务、聚合分布式应用的多种技术升级革新,目前整个部门现状剖析如下: 架构方面:多语言、多数据源、技术升级的业务入侵问题显著;数据方面:利用拆分引发的数据孤岛问题,继而造成大量的数据复制、从新建设问题;利用方面:从业绩的角度登程,业务方心愿及时精确地看见业绩数据,对实时性有了较高需要;效率方面:体系化的流程与工具诉求愈发强烈;老本方面:次要问题是既懂大数据又懂业务的人才招聘难,团队建设老本高 伊的家近几年业务高速增长,数据量激增,业务复杂度也随之增大,解决在以后大数据架构之下,“人才储备难”、“业务降级受限于已有技术”、“双11流动压力大”等痛点问题已火烧眉毛。 产品选型伊的家技术部门对于技术升级革新的需要有十分明确清晰的定义,次要围绕关存储弹性扩缩容、查问性能优化、OLAP、学习老本、查问响应、可扩大等角度进行开展,外围关注以下3个问题: 1)如何疾速实现数据荡涤 2)如何疾速精准实现数据校验 3)如何疾速进行故障复原解决 在技术选型时始终保持“技术选型是第一生产力”的准则,深信技术储备没有最好只有更好,深信技术选型是决定能力差异化所在,保持进步一次性把事件做对的能力,深信凋谢分享、认知降级的重要性。 晚期耶基于Hadoop、HBase、Kafaka、Azkaban、Spark、Greenplum等开源大数据产品进行了许多摸索尝试,通过性能比照最终采纳了Greenplum,但最终发现Greenplum并发能力差,只适宜剖析场景,并不适宜高并发的查问服务。 起初,在阿里云大数据计算平台团队的倡议下,伊的家技术部进行了全面架构降级,整个架构由DataWorks、实时计算Flink和Hologres组成,架构简略、学习老本非常低,仅通过SQL即可轻松跑通全链路。 上面将会给大家介绍,阿里云技术产品在伊的家落地的场景最佳实际 最佳实际一、客户零碎实际伊的家原客户关系管理系统(CRM)次要基于MySQL、MQ、Canal以及自研利用组成,为反对业务零碎切断式降级,技术部门自主研发了一套消息中间件,保护老本较高;基于Binlog、MQ、OLAP等产品自定义的数据开发流程过程繁琐简单、保护老本极高,且因为零碎要求数据有序对荡涤的并发产生了肯定的限度。 基于Hologres+DataWorks+实时计算Flink进行架构降级后,间接通过DataWorks数据集成将数据库数据实时写入Hologres,而后通过实时计算Flink订阅Hologres做进一步实时荡涤,把后果表更新到数据库,即可间接服务业务。 整体架构清晰简略、数据精准、端到端纯实时、存储剖析一体化、托管式运维、全自动工具作业,原零碎15人花了3个月才实现我的项目上线,以后架构仅需2天即部署实现。 二、BI业绩零碎实际BI业绩零碎也能够了解为实时GMV大屏,业务数据次要有两方面的要求: 实时精准,业绩计算绝不允许出错。原架构如下图图所示,原始数据层通过Binlog,再通过Canal套件实时写入MQ,之后依据业务域进行业务数据分层和荡涤。任务调度零碎更新业绩的程序为“日-月-季度-年”,这个看似完满的计划理论存在着几个问题: 实时性问题:看似实时,其实过程中可能存在5~10分钟的提早;并发问题:生产的并发有肯定限度。运维问题:如果图中的某个环节呈现问题,可能会导致系统也跟着呈现问题。数据荡涤时效问题:荡涤脚本运行一次可能须要数分钟,这期间可能会产生许多其余事件。 下图为降级后的BI业绩零碎新架构。通过DataWorks实时同步明细数据至Hologres,基于Hologres数据再减少一份实时计算Flink的实时ETL作业,即可实现“日-月-季度-年”数据的加工,最初基于Hologres对下层利用提供剖析查问服务。整个零碎纯实时调度、实时性高、秒级提早、全SQL开发、数据校验高效。 三、实时利用数仓架构实际伊的家的技术部门也始终在思考如何让利用开发人员也具备大数据开发能力,如何让大数据不仅仅为大数据团队所用,还同时为利用开发团队所用。 基于实时计算FLink+Hologres+DataWorks实时数仓架构的落地,晋升了数据底盘的可复用性,进步了应答业务变动的数据动静调整的灵活性,与利用团队独特构建起带数据的利用零碎。 四、团体数仓架构实际伊的家数仓团队服务在电商业务的同时,还须要反对团体外部业务。团体数仓平台如市场支流数仓架构、基于开源大数据体系构建,目前也曾经全面降级为Hologres+实时计算Flink+DataWorks实时数仓架构。 业务价值与赋能Hologres+实时计算Flink+DataWorks实时数仓新计划为业务上带来的价值次要如下: 对立数据:一套计划就能反对残缺流程,明细表、维度表等数据对立、有序对立服务:由Hologers间接提供各种线上服务,包含数据分析,数据服务等,缩小接口建设。对立存储:以Hologres为对立存储,多数据源都能间接写入到Hologres,无冗余存储,节约老本对立治理:DataWorks提供统一标准、对立作业和对立监控等,为大数据开发平台提供对立治理。从业务上来说,新的大数据计划真的做到了开箱即用,所见即所得。 展望未来在大数据畛域,数据规模和业务复杂性是同时制约查问性能的关键因素,在这个过程中,唯有咱们的开发人员一直打磨本人的数据模型,当数据模型达到肯定成熟度,性能问题即可迎刃而解。 最初,心愿大家拥抱技术、拥抱变动、赢在模型,数据服务业务,数据服务利用,让咱们为利用而生,为利用而战。 作者:刘松森 ,伊的家CTO,高级工程师,副教授职称,国内多所高校客座教授

June 18, 2021 · 1 min · jiezi

关于flink:来电科技基于-Flink-Hologres-的实时数仓演进之路

简介: 本文将会讲述共享充电宝创始企业复电科技如何基于 Flink + Hologres 构建对立数据服务减速的实时数仓。 作者:陈健新,复电科技数据仓库开发工程师,目前专一于负责复电科技大数据平台离线和实时架构的整合。 深圳复电科技有限公司(以下简称 “复电科技”)是共享充电宝行业创始企业,次要业务笼罩充电宝自助租赁、定制商场导航机开发、广告展现设施及广告流传等服务。复电科技领有业内立体化产品线,大中小机柜以及桌面型,目前全国超过 90% 的城市实现业务服务落地,注册用户超 2 亿人,实现全场景用户需要。 一、大数据平台介绍1. 倒退历程复电科技大数据平台的倒退历程次要分为以下三个阶段: 1)离散 0.X Greenplum 为什么说离散?因为之前没有一个对立的大数据平台来反对数据服务,而是由每个业务开发线自行取数或者做一些计算,并用一个低配版的 Greenplum 离线服务来维持日常的数据需要。 2)离线 1.0 EMR 之后架构降级为离线 1.0 EMR,这里的 EMR 指的是阿里云由大数据组成的弹性分布式混合集群服务,包含 Hadoop、HiveSpark 离线计算等常见组件。 阿里云 EMR 次要解决咱们三个痛点: 一是存储计算资源的程度可扩大;二是解决了后面各个业务线异构数据带来的开发保护问题,由平台对立荡涤入仓;三是咱们能够建设本人的数仓分层体系,划分一个主题域,为咱们的指标零碎打好根底。3)实时、对立 2.0 Flink + Hologres 以后正经验的 “Flink + Hologres” 实时数仓,这也是本文分享的外围。它为咱们大数据平台带来了两个质的扭转,一是实时计算,二是对立数据服务。基于这两点,咱们减速常识数据摸索,促成业务疾速倒退。 2. 平台能力总的概括来说,2.0 版本的大数据平台提供了以下能力: 数据集成 平台当初反对应用实时或者离线的形式集成业务数据库或业务数据的日志。 数据开发 平台现已反对基于 Spark 的离线计算以及基于 Flink 的实时计算。 数据服务 数据服务次要由两局部组成: 一部分是由 Impala 提供的剖析服务和即席剖析的能力;另一部分是 Hologres 提供的针对业务数据的交互式剖析能力。数据利用 同时平台能够间接对接常见的 BI 工具,业务零碎也能疾速地集成对接。 3. 获得成就大数据平台提供的能力给咱们带来了不少成就,总结为以下五点: 横向扩大 ...

June 17, 2021 · 2 min · jiezi

关于Flink:基于-Flink-打造的伴鱼实时计算平台-Palink-的设计与实现

作者:李辉 在伴鱼倒退晚期,呈现了一系列实时性相干的需要,比方算法工程师冀望能够拿到用户的实时特色数据做实时举荐,产品经理心愿数据方能够提供实时指标看板做实时经营剖析。 这个阶段中台数据开发工程师次要是基于 Spark 实时计算引擎开发作业来满足业务方提出的需要。然而这类作业并没有对立的平台进行治理,工作的开发模式、提交形式、可用性保障等也齐全因人而异。 随同着业务的减速倒退,越来越多的实时场景涌现进去,对实时作业的开发效率和品质保障提出了更高的要求。为此,咱们从去年开始着手打造伴鱼公司级的实时计算平台,平台代号 Palink,由 Palfish + Flink 组合而来。 之所以抉择 Flink 作为平台惟一的实时计算引擎,是因为近些年来其在实时畛域的优良体现和主导地位,同时沉闷的社区气氛也提供了十分多不错的实践经验可供借鉴。目前 Palink 我的项目曾经落地并投入使用,很好地满足了伴鱼业务在实时场景的需要。 外围准则通过调研阿里云、网易等各大厂商提供的实时计算服务,咱们根本确定了 Palink 的整个产品状态。同时,在零碎设计过程中紧紧围绕以下几个外围准则: 极简性:放弃繁难设计,疾速落地,不适度谋求性能的完整性,满足外围需要为主;高质量:放弃我的项目品质严要求,外围模块思虑周全;可扩大:放弃较高的可扩展性,便于后续计划的迭代降级。零碎设计平台整体架构以下是平台整体的架构示意图: 整个平台由四局部组成: Web UI:前端操作页面;Palink (GO) 服务:实时作业管理服务,负责作业元信息及作业生命周期内全副状态的治理,承接全副的前端流量。包含作业调度、作业提交、作业状态同步及作业 HA 治理几个外围模块;PalinkProxy(JAVA) 服务:SQL 化服务,Flink SQL 作业将由此模块编译、提交至远端集群。包含 SQL 语法校验、SQL 作业调试及 SQL 作业编译和提交几个外围模块;Flink On Yarn:基于 Hadoop Yarn 做集群的资源管理。这里之所以将后盾服务拆分成两块,并且别离应用 GO 和 JAVA 语言实现,起因次要有三个方面: 一是伴鱼领有一套十分欠缺的基于 GO 语言实现的微服务根底框架,基于它能够疾速构建服务并领有包含服务监控在内的一系列周边配套,公司目前 95% 以上的服务是基于此服务框架构建的;二是 SQL 化模块是基于开源我的项目二次开发实现的(这个在后文会做具体介绍),而该开源我的项目应用的是 JAVA 语言;三是外部服务减少一次近程调用的老本是能够承受的。这里也体现了咱们极简性准则中对疾速落地的要求。事实上,以 GO 为外围开发语言是十分具备 Palfish 特色的,在接下来伴鱼大数据系列的相干文章中也会有所体现。 接下来本文将着重介绍 Palink 几个外围模块的设计。 作业调度&执行后端服务接管到前端创立作业的申请后,将生成一条 PalinkJob 记录和一条 PalinkJobCommand 记录并长久化到 DB,PalinkJobCommand 为作业提交执行阶段形象出的一个实体,整个作业调度过程将围绕该实体的状态变更向前推动。其构造如下: ...

June 10, 2021 · 2 min · jiezi

关于Flink:汽车之家基于-Flink-Iceberg-的湖仓一体架构实践

内容简要: 一、数据仓库架构降级的背景 二、基于 Iceberg 的湖仓一体架构实际 三、总结与收益 四、后续布局 <p style="text-align:center"> GitHub 地址 https://github.com/apache/flink欢送大家给 Flink 点赞送 star~</p> 一、数据仓库架构降级的背景1. 基于 Hive 的数据仓库的痛点原有的数据仓库齐全基于 Hive 建造而成,次要存在三大痛点: 痛点一:不反对 ACID 1)不反对 Upsert 场景; 2)不反对 Row-level delete,数据修改老本高。 痛点二:时效性难以晋升 1)数据难以做到准实时可见; 2)无奈增量读取,无奈实现存储层面的流批对立; 3)无奈反对分钟级提早的数据分析场景。 痛点三:Table Evolution 1)写入型 Schema,对 Schema 变更反对不好; 2)Partition Spec 变更反对不敌对。 2. Iceberg 要害个性Iceberg 次要有四大要害个性:反对 ACID 语义、增量快照机制、凋谢的表格局和流批接口反对。 反对 ACID 语义 不会读到不残缺的 Commit;基于乐观锁反对并发 Commit;Row-level delete,反对 Upsert。增量快照机制 Commit 后数据即可见(分钟级);可回溯历史快照。凋谢的表格局 数据格式:parquet、orc、avro计算引擎:Spark、Flink、Hive、Trino/Presto流批接口反对 反对流、批写入;反对流、批读取。二、基于 Iceberg 的湖仓一体架构实际湖仓一体的意义就是说我不须要看见湖和仓,数据有着买通的元数据的格局,它能够自在的流动,也能够对接下层多样化的计算生态。 ——贾扬清(阿里云计算平台高级研究员) 1. Append 流入湖的链路 上图为日志类数据入湖的链路,日志类数据蕴含客户端日志、用户端日志以及服务端日志。这些日志数据会实时录入到 Kafka,而后通过 Flink 工作写到 Iceberg 外面,最终存储到 HDFS。 ...

June 10, 2021 · 3 min · jiezi

关于Flink:汽车之家基于-Flink-Iceberg-的湖仓一体架构实践

简介: 由汽车之家实时计算平台负责人邸星星在 4 月 17 日上海站 Meetup 分享的,基于 Flink + Iceberg 的湖仓一体架构实际。 内容简要: 一、数据仓库架构降级的背景 二、基于 Iceberg 的湖仓一体架构实际 三、总结与收益 四、后续布局 一、数据仓库架构降级的背景1. 基于 Hive 的数据仓库的痛点原有的数据仓库齐全基于 Hive 建造而成,次要存在三大痛点: 痛点一:不反对 ACID 1)不反对 Upsert 场景; 2)不反对 Row-level delete,数据修改老本高。 痛点二:时效性难以晋升 1)数据难以做到准实时可见; 2)无奈增量读取,无奈实现存储层面的流批对立; 3)无奈反对分钟级提早的数据分析场景。 痛点三:Table Evolution 1)写入型 Schema,对 Schema 变更反对不好; 2)Partition Spec 变更反对不敌对。 2. Iceberg 要害个性Iceberg 次要有四大要害个性:反对 ACID 语义、增量快照机制、凋谢的表格局和流批接口反对。 反对 ACID 语义 不会读到不残缺的 Commit;基于乐观锁反对并发 Commit;Row-level delete,反对 Upsert。增量快照机制 Commit 后数据即可见(分钟级);可回溯历史快照。凋谢的表格局 数据格式:parquet、orc、avro计算引擎:Spark、Flink、Hive、Trino/Presto流批接口反对 反对流、批写入;反对流、批读取。二、基于 Iceberg 的湖仓一体架构实际湖仓一体的意义就是说我不须要看见湖和仓,数据有着买通的元数据的格局,它能够自在的流动,也能够对接下层多样化的计算生态。——贾扬清(阿里云计算平台高级研究员) 1. Append 流入湖的链路 ...

June 10, 2021 · 3 min · jiezi

关于flink:PyFlink-教程三PyFlink-DataStream-API-state-timer

一、背景Flink 1.13 已于近期正式公布,超过 200 名贡献者参加了 Flink 1.13 的开发,提交了超过 1000 个 commits,实现了若干重要性能。其中,PyFlink 模块在该版本中也新增了若干重要性能,比方反对了 state、自定义 window、row-based operation 等。随着这些性能的引入,PyFlink 性能曾经日趋完善,用户能够应用 Python 语言实现绝大多数类型Flink作业的开发。接下来,咱们具体介绍如何在 Python DataStream API 中应用 state & timer 性能。 二、state 性能介绍作为流计算引擎,state 是 Flink 中最外围的性能之一。 在 1.12 中,Python DataStream API 尚不反对 state,用户应用 Python DataStream API 只能实现一些简略的、不须要应用 state 的利用;而在 1.13 中,Python DataStream API 反对了此项重要性能。state 应用示例如下是一个简略的示例,阐明如何在 Python DataStream API 作业中应用 state: from pyflink.common import WatermarkStrategy, Rowfrom pyflink.common.typeinfo import Typesfrom pyflink.datastream import StreamExecutionEnvironmentfrom pyflink.datastream.connectors import NumberSequenceSourcefrom pyflink.datastream.functions import RuntimeContext, MapFunctionfrom pyflink.datastream.state import ValueStateDescriptorclass MyMapFunction(MapFunction): def open(self, runtime_context: RuntimeContext): state_desc = ValueStateDescriptor('cnt', Types.LONG()) # 定义value state self.cnt_state = runtime_context.get_state(state_desc) def map(self, value): cnt = self.cnt_state.value() if cnt is None: cnt = 0 new_cnt = cnt + 1 self.cnt_state.update(new_cnt) return value[0], new_cntdef state_access_demo(): # 1. 创立 StreamExecutionEnvironment env = StreamExecutionEnvironment.get_execution_environment() # 2. 创立数据源 seq_num_source = NumberSequenceSource(1, 100) ds = env.from_source( source=seq_num_source, watermark_strategy=WatermarkStrategy.for_monotonous_timestamps(), source_name='seq_num_source', type_info=Types.LONG()) # 3. 定义执行逻辑 ds = ds.map(lambda a: Row(a % 4, 1), output_type=Types.ROW([Types.LONG(), Types.LONG()])) \ .key_by(lambda a: a[0]) \ .map(MyMapFunction(), output_type=Types.TUPLE([Types.LONG(), Types.LONG()])) # 4. 将打印后果数据 ds.print() # 5. 执行作业 env.execute()if __name__ == '__main__': state_access_demo()在下面的例子中,咱们定义了一个 MapFunction,该 MapFunction 中定义了一个名字为 “cnt_state” 的 ValueState,用于记录每一个 key 呈现的次数。 ...

June 9, 2021 · 5 min · jiezi

关于Flink:Flink-Iceberg-在去哪儿的实时数仓实践

作者:余东 本文介绍去哪儿数据平台在应用 Flink + Iceberg 0.11 的一些实际。内容包含: 背景及痛点Iceberg 架构痛点一:Kafka 数据失落痛点二:近实时 Hive 压力大Iceberg 优化实际总结一、背景及痛点1. 背景咱们在应用 Flink 做实时数仓以及数据传输过程中,遇到了一些问题:比方 Kafka 数据失落,Flink 联合 Hive 的近实时数仓性能等。Iceberg 0.11 的新个性解决了这些业务场景碰到的问题。比照 Kafka 来说,Iceberg 在某些特定场景有本人的劣势,在此咱们做了一些基于 Iceberg 的实际分享。 2. 原架构计划原先的架构采纳 Kafka 存储实时数据,其中包含日志、订单、车票等数据。而后用 Flink SQL 或者 Flink datastream 生产数据进行流转。外部自研了提交 SQL 和 Datastream 的平台,通过该平台提交实时作业。 3. 痛点Kafka 存储老本高且数据量大。Kafka 因为压力大将数据过期工夫设置的比拟短,当数据产生反压,积压等状况时,如果在肯定的工夫内没生产数据导致数据过期,会造成数据失落。Flink 在 Hive 上做了近实时的读写反对。为了分担 Kafka 压力,将一些实时性不太高的数据放入 Hive,让 Hive 做分钟级的分区。然而随着元数据一直减少,Hive metadata 的压力日益显著,查问也变得更慢,且存储 Hive 元数据的数据库压力也变大。二、Iceberg 架构1. Iceberg 架构解析 术语解析 数据文件(data files) Iceberg 表实在存储数据的文件,个别存储在 data 目录下,以 “.parquet” 结尾。 ...

June 9, 2021 · 3 min · jiezi

关于flink:来电科技基于FlinkHologres的实时数仓演进之路

简介:本文将会讲述共享充电宝创始企业复电科技如何基于Flink+Hologres构建对立数据服务减速的实时数仓 作者:陈健新,复电科技数据仓库开发工程师,目前专一于负责复电科技大数据平台离线和实时架构的整合。 深圳复电科技有限公司(以下简称“复电科技”)是共享充电宝行业创始企业,次要业务笼罩充电宝自助租赁、定制商场导航机开发、广告展现设施及广告流传等服务。复电科技领有业内立体化产品线,大中小机柜以及桌面型,目前全国超过90%的城市实现业务服务落地,注册用户超2亿人,实现全场景用户需要。 一、大数据平台介绍(一)倒退历程复电科技大数据平台的倒退历程次要分为以下三个阶段: 1.离散0.X Greenplum 为什么说离散?因为之前没有一个对立的大数据平台来反对数据服务,而是由每个业务开发线自行取数或者做一些计算,并用一个低配版的Greenplum离线服务来维持日常的数据需要。 2.离线1.0 EMR 之后架构降级为离线1.0 EMR,这里的EMR指的是阿里云由大数据组成的弹性分布式混合集群服务,包含Hadoop、HiveSpark离线计算等常见组件。 阿里云EMR次要解决咱们三个痛点:一是存储计算资源的程度可扩大;二是解决了后面各个业务线异构数据带来的开发保护问题,由平台对立荡涤入仓;三是咱们能够建设本人的数仓分层体系,划分一个主题域,为咱们的指标零碎打好根底。 3.实时、对立 2.0 Flink+Hologres 以后正经验的“Flink+Hologres”实时数仓,这也是本文分享的外围。它为咱们大数据平台带来了两个质的扭转,一是实时计算,二是对立数据服务。基于这两点,咱们减速常识数据摸索,促成业务疾速倒退。 (二)平台能力总的概括来说,2.0版本的大数据平台提供了以下能力: 1)数据集成 平台当初反对应用实时或者离线的形式集成业务数据库或业务数据的日志。 2)数据开发 平台现已反对基于Spark的离线计算以及基于Flink的实时计算。 3)数据服务 数据服务次要由两局部组成:一部分是由Impala提供的剖析服务和即席剖析的能力,另一部分是Hologres提供的针对业务数据的交互式剖析能力。 4)数据利用 同时平台能够间接对接常见的BI工具,业务零碎也能疾速地集成对接。 (三)获得成就大数据平台提供的能力给咱们带来了不少成就,总结为以下五点: 1)横向扩大 大数据平台的外围就是分布式架构,这样咱们可能低成本地程度扩大存储或者计算资源。 2)资源共享 能够整合所有服务器可用的资源。以前的架构是每个业务部门本人保护一套集群,这样会造成一些节约,难以保障可靠性,而且运费老本较高,当初由平台对立调度。 3)数据共享 整合了业务部门所有的业务数据以及业务日志等其余异构数据源数据,由平台对立荡涤对接。 4)服务共享 数据共享之后就由平台对立对外输入服务,各个业务线无需自行反复开发,就能疾速失去平台提供的数据撑持。 5)平安保障 由平台提供对立的平安认证等受权机制,能够做到对不同人进行不同水平的细粒度受权,保障数据安全。 二、企业业务对数据方面的需要随着业务的疾速倒退,构建对立的实时数仓火烧眉毛,综合0.x、1.0版本的平台架构,综合业务的当初倒退和将来趋势判断,构建2.x版本数据平台的需要次要集中在以下几个方面: 1)实时大屏 实时大屏须要替换旧的准实时大屏,采纳更牢靠、低提早的技术计划。 2)对立数据服务 高性能、高并发和高可用的数据服务成为企业数字化转型对立数据门户的要害,须要构建一个对立的数据门户,对立对外输入。 3)实时数仓 数据时效性在企业经营中的重要性日益凸现,须要响应更快更及时。 三、实时数仓和对立数据服务技术计划(一)整体技术架构 技术架构次要分为四个局部,别离是数据ETL、实时数仓、离线数仓和数据利用。 • 数据ETL是对业务数据库和业务日志进行实时处理,对立应用Flink实时计算,• 实时数仓中数据实时处理后进入Hologres存储与剖析• 业务冷数据存储在Hive离线数仓,并同步到Hologres做进一步的数据分析解决• 由Hologres对立对接罕用的 BI工具,如Tableau、Quick BI、DataV和业务零碎等。 (二)实时数仓数据模型 如上所示,实时数仓和离线数仓有一些类似的中央,只不过少一些其它层的链路。• 第一层是原始数据层,数据起源有两种类型,一种是业务库的Binlog,第二种是服务器的业务日志,对立用Kafka作为存储介质。• 第二层是数据明细层,将原始数据层Kafka外面的信息进行ETL提取,作为实时明细存储至Kafka。这样做的目标是为了不便上游不同消费者同时订阅,同时不便后续应用层的应用。维表数据也是通过Hologres存储,来满足上面的数据关联或者条件过滤。• 第三是数据应用层,这里除了买通Hologres,还应用了Hologres对接了Hive,由Hologres对立提供下层应用服务。 (三)整体技术架构数据流 上面的数据流图能够具象加深整体架构的布局和数仓模型整体的数据流向。从图中能够看出,次要分为三个模块,第一个是集成解决,第二个是实时数仓,第三块是数据利用。 从数据的流入流出看到次要的外围有两点: • 第一个外围是Flink的实时计算:能够从Kafka获取,或者间接Flink cdt读取MySQL Binlog数据,或者间接再写回Kafka集群,这是一个外围。• 第二个外围是对立数据服务:当初对立数据服务是由Hologres实现,防止数据孤岛产生的问题,或者一致性难以保护等,也减速了离线数据的剖析。 四、具体实际细节(一)大数据技术选型 计划执行分为两个局部:实时与服务剖析。实时方面咱们抉择了阿里云Flink全托管的形式,它次要有以下几方面长处: 1)状态治理与容错机制; 2)Table API和Flink SQL反对; ...

June 4, 2021 · 1 min · jiezi

关于flink:实时计算-Flink-版总体介绍

简介: 实时计算 Flink 版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于 Apache Flink 构建的企业级、高性能实时大数据处理系统,由 Apache Flink 开创团队官网出品,领有寰球对立商业化品牌,齐全兼容开源 Flink API,提供丰盛的企业级增值性能。 本文整顿自直播《实时计算 Flink 版总体介绍 》视频链接:https://developer.aliyun.com/... Apache Flink技术倒退 大数据的高速倒退曾经超过10年,大数据也正在从计算规模化向更加实时化的趋势演进。 比方阿里巴巴举办的购物狂环节双11,能够通过实时大屏展现整个双11实时的交易额、成交额,并可实现毫秒级的更新;全球华人都会观看的中央电视台春节联欢晚会,能够通过春晚大屏,实时统计全国的收视率与观众画像;当初多个城市都有的城市大脑我的项目,通过 IoT的摄像头信息,实时捕捉各个城市中的交通、车辆、人流等信息去做交通的监察和治理;还有金融行业,在银行、证券交易所等机构的外围业务场景下,也都在通过大数据实时计算能力实时监控交易行为,进行反作弊反洗钱等行为的探测;除此之外,在整个淘宝电商交易的场景下,实时依据用户的行为进行个性化举荐,基于用户在前一分钟或者30秒内浏览商品状况,在后续的浏览中零碎就会依据算法测算用户画像,而后实时向用户举荐可能会喜爱的相干商品等。能够说这么多日常生活中波及的场景,背地都是由实时计算在推动生产力的晋升,日夜不息。 实时计算须要后盾有一套极其弱小的大数据计算能力,Apache Flink作为一款开源大数据实时计算技术应运而生。它从设计之初就由流计算开启,因为传统的Hadoop、Spark等计算引擎,实质上是批计算引擎,通过对无限的数据集进行数据处理,其解决延时性是不能保障的。而Apache Flink作为流式计算引擎,它能够实时订阅实时产生的事实数据,并实时对数据进行剖析解决并产生后果,让数据在第一工夫施展价值。 目前Apache Flink也从流计算的引擎逐步领有流批一体的计算能力,能够通过日志流,点击流,IoT数据流等进行流式的剖析解决,同时也能够对数据库和文件系统中的文件等无限数据集进行批式的数据处理,疾速剖析后果。Apache Flink 当初是开源社区中十分风行的一个开源大数据技术,并且间断三年成为Apache开源我的项目中寰球活跃度最高的我的项目之一。它具备强一致性的计算能力、大规模的扩展性,整体性能十分卓越,同时反对SQL、Java、Python等多语言,领有丰盛的API接口不便各种场景业务应用。目前国内外互联网企业中Flink曾经成为支流的实时大数据计算技术,是实时计算畛域的事实技术标准。 阿里云实时计算 Flink 版产品,在阿里巴巴团体外部历经多年锻炼和验证,积攒了丰盛的技术和产品,现曾经提供到云上,为各行各业中小企业提供云计算服务。早在2016年,Apache Flink刚刚募捐给Apache之后的第三年,阿里曾经开始大规模上线应用实时计算产品了。这个产品最早上线于阿里最外围的搜寻举荐以及广告业务场景,在这个场景下咱们须要大量的数据实时化的解决,比方实时举荐、实时排序、实时广告等,对整个电商的外围业务有十分大的晋升。 2017年,基于 Flink 的实时计算平台产品,开始服务于整个阿里巴巴团体,同年双11服务全团体的数据实时化,包含最外围的双11的大屏。在2018年产品正式上云,不仅服务团体内,同时开始服务云上中小企业,这也是第一次将实时计算 Flink 的产品以公共云的模式对外提供服务。 2019年初,阿里巴巴收买了 Flink 的开创公司 - Ververica,阿里的 Flink 技术团队-实时计算技术团队和德国总部的Flink开创团队顺利会师,成为了寰球 Flink 技术最强的团队,也独特推动了整个Apache Flink 开源社区的倒退和奉献。目前中国Apache Flink社区有超过20w的开发者参加到社区中,Flink成为Apache基金会大数据畛域最沉闷的我的项目之一。 去年,在寰球支流的云计算公司和大数据公司,都大量采纳 Flink 的技术推出了本人的 Flink 产品。比方借Hadoop起家的Cloudera也推出全面集成了 Flink 的CDP/CDH,国内的大数据公司也陆续推出了基于 Flink 的实时计算产品。 实时计算Flink版产品架构阿里云的实时计算产品架构和开源版本相比拟,有很大的进步和增值。当初很多开发者在自建机房或者云上虚拟机作业时都会应用开源的Apache Flink 去搭建本人的实时计算平台。那么阿里云官网推出的实时计算Flink产品,它的特色是什么呢? ...

June 4, 2021 · 1 min · jiezi

关于flink:干货篇bilibili基于-Flink-的机器学习工作流平台在-b-站的应用

分享嘉宾:张杨,B 站资深开发工程师 导读:整个机器学习的过程,从数据上报、到特色计算、到模型训练、再到线上部署、最终成果评估,整个流程十分简短。在 b 站,多个团队都会搭建本人的机器学习链路,来实现各自的机器学习需要,工程效率和数据品质都难以保障。于是咱们基于 Flink 社区的 aiflow 我的项目,构建了整套机器学习的规范工作流平台,减速机器学习流程构建,晋升多个场景的数据实效和准确性。本次分享将介绍 b 站的机器学习工作流平台 ultron 在 b 站多个机器学习场景上的利用。 目录: 1、机器学习实时化 2、Flink 在 B 站机器学习的应用 3、机器学习工作流平台构建 4、将来布局 一、机器学习实时化 首先讲下机器学习的实时化,次要是分为三局部: 第一是样本的实时化。传统的机器学习,样本全部都是 t+1,也就是说,明天模型用的是昨天的训练数据,每天早上应用昨天的全天数据训练一次模型;第二是特色的实时化。以前的特色也根本都是 t+1,这样就会带来一些举荐不精确的问题。比方,明天我看了很多新的视频,但给我举荐的却还是一些昨天或者更久之前看到的内容;第三就是模型训练的实时化。咱们有了样本的实时化和特色的实时化之后,模型训练也是齐全能够做到在线训练实时化的,能带来更实时的举荐成果。传统离线链路 上图是传统的离线链路图,首先是 APP 产生日志或者服务端产生 log,整个数据会通过数据管道落到 HDFS 上,而后每天 t+1 做一些特色生成和模型训练,特色生成会放到特色存储外面,可能是 redis 或者一些其余的 kv 存储,再给到下面的 inference 在线服务。 传统离线链路的有余 那它有什么问题呢? 第一是 t+1 数据模型的特色时效性都很低,很难做到特地高时效性的更新;第二是整个模型训练或者一些特色生产的过程中,每天都要用天级的数据,整个训练或者特色生产的工夫十分长,对集群的算力要求十分高。实时链路 上图咱们进行优化之后整个实时链路的过程,红叉的局部是被去掉的。整个数据上报后通过 pipeline 间接落到实时的 kafka,之后会做一个实时特色的生成,还有实时样本的生成,特色后果会写到 feature store 外面去,样本的生成也须要从 feature store 外面去读取一些特色。 生成完样本之后咱们间接进行实时训练。整个左边的那个很长的链路曾经去掉了,然而离线特色的局部咱们还是保留了。因为针对一些非凡特色咱们还是要做一些离线计算,比方一些特地简单不好实时化的或者没有实时化需要的。 二、Flink 在 b 站机器学习的应用 上面讲下咱们是怎么做到实时样本、实时特色和实时成果评估的。 第一个是实时样本。Flink 目前托管 b 站所有举荐业务样本数据生产流程;第二个是实时特色。目前相当一部分特色都应用了 Flink 进行实时计算,时效性十分高。有很多特色是应用离线 + 实时组合的形式得出后果,历史数据用离线算,实时数据用 Flink,读取特色的时候就用拼接。 ...

June 3, 2021 · 2 min · jiezi

关于flink:Flink-在有赞的实践和应用

作者:沈磊 简介:明天次要分享的内容是 Flink 在有赞的实际和利用。内容包含: Flink 的容器化革新和实际Flink SQL 的实际和利用将来布局。一、Flink 的容器化革新和实际1. 有赞的集群演进历史2014 年 7 月,第一个 Storm 工作正式上线;2016 年,引入 Spark Streaming, 运行在 Hadoop Yarn;2018 年,引入了 Flink,作业模式为 Flink on Yarn Per Job;2020 年 6 月,实现了 100% Flink Jar 工作 K8s 化, K8s 作为 Flink Jar 默认计算资源,Flink SQL 工作 On Yarn,Flink 对立实时开发;2020 年 11 月,Storm 集群正式下线。原先的 storm 工作全副都迁徙到了 Flink;2021 年,咱们打算把所有的 Flink 工作 K8s 化。 2. Flink 在外部反对的业务场景Flink 反对的业务场景有风控,埋点的实时工作,领取,算法实时特色解决,BI 的实时看板,以及实时监控等等。目前的实时工作规模有 500+。 3. 有赞在 Flink on Yarn 的痛点次要有三局部: ...

June 3, 2021 · 4 min · jiezi

关于flink:Flink-和-Pulsar-的批流融合

简介:StreamNative 联结创始人翟佳在本次演讲中介绍了下一代云原生音讯流平台 Apache Pulsar,并解说如何通过 Apache Pulsar 原生的存储计算拆散的架构提供批流交融的根底,以及 Apache Pulsar 如何与 Flink 联合,实现批流一体的计算。Apache Pulsar 绝对比拟新,它于 2017 年退出 Apache 软件基金会,2018 年才从 Apache 软件基金会毕业并成为一个顶级我的项目。Pulsar 因为原生采纳了存储计算拆散的架构,并且有专门为音讯和流设计的存储引擎 BookKeeper,联合 Pulsar 自身的企业级个性,失去了越来越多开发者的关注。明天的分享分为 3 个局部: Apache Pulsar 是什么;Pulsar 的数据视图;Pulsar 与 Flink 的批流交融。一、Apache Pulsar 是什么下图是属于音讯畛域的开源工具,从事音讯或者基础设施的开发者对这些肯定不会生疏。尽管 Pulsar 在 2012 年开始开发,直到 2016 年才开源,但它在跟大家见面之前曾经在雅虎的线上运行了很长时间。这也是为什么它一开源就失去了很多开发者关注的起因,它曾经是一个通过线上测验的零碎。 Pulsar 跟其余音讯零碎最基本的不同在于两个方面: 一方面,Pulsar 采纳存储计算拆散的云原生架构;另一方面,Pulsar 有专门为音讯而设计的存储引擎,Apache BookKeeper。架构下图展现了 Pulsar 存储计算拆散的架构: 首先在计算层,Pulsar Broker 不保留任何状态数据、不做任何数据存储,咱们也称之为服务层。其次,Pulsar 领有一个专门为音讯和流设计的存储引擎 BookKeeper,咱们也称之为数据层。 这个分层的架构对用户的集群扩大非常不便: 如果想要反对更多的 Producer 和 Consumer,能够裁减下面无状态的 Broker 层;如果要做更多的数据存储,能够独自裁减底层存储层。这个云原生的架构有两个次要特点: 第一个是存储计算的拆散;另外一个特点是每一层都是一个节点对等的架构。从节点对等来说,Broker 层不存储数据,所以很容易实现节点对等。然而 Pulsar 在底层的存储也是节点对等状态:在存储层,BookKeeper 没有采纳 master/slave 这种主从同步的形式,而是通过 Quorum 的形式。 ...

May 26, 2021 · 3 min · jiezi

关于Flink:Flink-最佳实践之使用-Canal-同步-MySQL-数据至-TiDB

一. 背景介绍本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的模式导入到 Kafka 中,继而被 Flink 生产的案例。 为了可能疾速的验证整套流程的功能性,所有的组件都以单机的模式部署。如果手上的物理资源有余,能够将本文中的所有组件一台 4G 1U 的虚拟机环境中。 如果须要在生产环境中部署,倡议将每一个组件替换成高可用的集群部署计划。 其中,咱们独自创立了一套 Zookeeper 单节点环境,Flink、Kafka、Canal 等组件共用这个 Zookeeper 环境。 针对于所有须要 JRE 的组件,如 Flink,Kafka,Canal,Zookeeper,思考到降级 JRE 可能会影响到其余的利用,咱们抉择每个组件独立应用本人的 JRE 环境。 本文分为两个局部,其中,前七大节次要介绍根底环境的搭建,最初一个大节介绍了数据是如何在各个组件中流通的。 数据的流动通过以下组件: MySQL 数据源生成 Binlog。Canal 读取 Binlog,生成 Canal json,推送到 Kafka 指定的 Topic 中。Flink 应用 flink-sql-connector-kafka API,生产 Kafka Topic 中的数据。Flink 在通过 flink-connector-jdbc,将数据写入到 TiDB 中。TiDB + Flink 的构造,反对开发与运行多种不同品种的应用程序。 目前次要的个性次要包含: 批流一体化。精细的状态治理。事件工夫反对。准确的一次状态一致性保障。Flink 能够运行在包含 YARN、Mesos、Kubernetes 在内的多种资源管理框架上,还反对裸机集群上独立部署。TiDB 能够部署 AWS、Kubernetes、GCP GKE 上,同时也反对应用 TiUP 在裸机集群上独立部署。 ...

May 26, 2021 · 9 min · jiezi

关于Flink:flink编译相关

flink编译相干好用的mirror <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!jeecg,!jeecg-snapshots,!mapr-releases</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> <mirror> <id>mapr-public</id> <mirrorOf>mapr-releases</mirrorOf> <name>mapr-releases</name> <url>https://maven.aliyun.com/repository/mapr-public</url> </mirror> mvn clean package -DskipTests -Dfast

May 25, 2021 · 1 min · jiezi

关于Flink:PyFlink-Table-API-Python-自定义函数

作者:付典 背景Python 自定义函数是 PyFlink Table API 中最重要的性能之一,其容许用户在 PyFlink Table API 中应用 Python 语言开发的自定义函数,极大地拓宽了 Python Table API 的应用范畴。 目前 Python 自定义函数的性能曾经十分欠缺,反对多种类型的自定义函数,比方 UDF(scalar function)、UDTF(table function)、UDAF(aggregate function),UDTAF(table aggregate function,1.13 反对)、Panda UDF、Pandas UDAF 等。接下来,咱们具体介绍一下如何在 PyFlink Table API 作业中应用 Python 自定义函数。 Python 自定义函数根底依据输出 / 输入数据的行数,Flink Table API & SQL 中,自定义函数能够分为以下几类: 自定义函数Single Row InputMultiple Row InputSingle Row OutputScalarFunctionAggregateFunctionMultiple Row OutputTableFunctionTableAggregateFunctionPyFlink 针对以上四种类型的自定义函数都提供了反对,接下来,咱们别离看一下每种类型的自定义函数如何应用。 Python UDFPython UDF,即 Python ScalarFunction,针对每一条输出数据,仅产生一条输入数据。比方以下示例,展现了通过多种形式,来定义名字为 "sub_string" 的 Python UDF: from pyflink.table.udf import udf, FunctionContext, ScalarFunctionfrom pyflink.table import DataTypes形式一:@udf(result_type=DataTypes.STRING())def sub_string(s: str, begin: int, end: int): return s[begin:end]形式二:sub_string = udf(lambda s, begin, end: s[begin:end], result_type=DataTypes.STRING())形式三:class SubString(object): def __call__(self, s: str, begin: int, end: int): return s[begin:end]sub_string = udf(SubString(), result_type=DataTypes.STRING())形式四:def sub_string(s: str, begin: int, end: int): return s[begin:end]sub_string_begin_1 = udf(functools.partial(sub_string, begin=1), result_type=DataTypes.STRING())形式五:class SubString(ScalarFunction): def open(self, function_context: FunctionContext): pass def eval(self, s: str, begin: int, end: int): return s[begin:end]sub_string = udf(SubString(), result_type=DataTypes.STRING())阐明: ...

May 25, 2021 · 5 min · jiezi

关于Flink:Flink-实时计算在微博的应用

微博机器学习研发核心数据计算负责人,高级零碎工程师曹富强为大家带来 Flink 实时计算在微博的利用介绍。内容包含: 1、微博介绍 2、数据计算平台介绍 3、Flink 在数据计算平台的典型利用 <p style="text-align:center"> GitHub 地址 https://github.com/apache/flink欢送大家给 Flink 点赞送 star~</p> 一、微博介绍本次给大家带来的分享是 Flink 实时计算在微博的利用。微博是中国当先的社交媒体平台,目前的日沉闷用户是 2.41 亿,月沉闷用户是 5.5 亿,其中移动用户占比超过了 94%。 二、数据计算平台介绍1. 数据计算平台详情下图为数据计算平台的架构图。 首先是调度,这块基于 K8s 和 Yarn 别离部署了实时数据处理的 Flink、Storm,以及用于离线解决的 SQL 服务。在集群之上,咱们部署了微博的 AI 平台,通过这个平台去对作业、数据、资源、样本等进行治理。在平台之上咱们构建了一些服务,通过服务化的形式去反对各个业务方。 1.实时计算这边的服务次要包含数据同步、内容去重、多模态内容了解、实时特色生成、实时样本拼接、流式模型训练,这些是跟业务关系比拟严密的服务。另外,还反对 Flink 实时计算和 Storm 实时计算,这些是比拟通用的根底计算框架。 2.离线这部分,联合 Hive 的 SQL,SparkSQL 构建一个 SQL 计算服务,目前曾经反对了微博外部绝大多数的业务方。 数据的输入是采纳数仓、特色工程这些数据中台的组建,对外提供数据输入。整体上来说,目前咱们在线跑的实时计算的作业将近 1000 多个,离线作业超过了 5000 多个,每天解决的数据量超过了 3 PB。 2. 数据计算上面两张图是数据计算,其中一个是实时计算,另外一个是离线计算。 实时计算次要包含实时的特色生成,多媒体特色生成和实时样本生成,这些跟业务关系比拟严密。另外,也提供一些根底的 flink 实时计算和 storm 实时计算。离线计算次要包含 SQL 计算。次要包含 SQL 的即席查问、数据生成、数据查问和表治理。表治理次要就是数仓的治理,包含表的元数据的治理,表的应用权限,还有表的上下游的血缘关系。 3. 实时特色如下图所示,咱们基于 Flink 和 Storm 构建了一个实时特色生成的服务。整体上来说,它会分为作业详情、输出源特色生成、输入和资源配置。用户依照咱们当时定义好的接口去开发特色生成的 UDF 就能够。其余的像输出、特色写入,都是平台主动提供的,用户只须要在页面上配置就好。另外,平台会提供输出数据源的监控、作业的异样监控、特色写入监控、特色读取监控等,这些都是主动生成的。 ...

May 25, 2021 · 2 min · jiezi

关于flink:Flink-最佳实践之使用-Canal-同步-MySQL-数据至-TiDB

简介: 本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的模式导入到 Kafka 中,继而被 Flink 生产的案例。 一. 背景介绍本文将介绍如何将 MySQL 中的数据,通过 Binlog + Canal 的模式导入到 Kafka 中,继而被 Flink 生产的案例。 为了可能疾速的验证整套流程的功能性,所有的组件都以单机的模式部署。如果手上的物理资源有余,能够将本文中的所有组件一台 4G 1U 的虚拟机环境中。 如果须要在生产环境中部署,倡议将每一个组件替换成高可用的集群部署计划。 其中,咱们独自创立了一套 Zookeeper 单节点环境,Flink、Kafka、Canal 等组件共用这个 Zookeeper 环境。 针对于所有须要 JRE 的组件,如 Flink,Kafka,Canal,Zookeeper,思考到降级 JRE 可能会影响到其余的利用,咱们抉择每个组件独立应用本人的 JRE 环境。 本文分为两个局部,其中,前七大节次要介绍根底环境的搭建,最初一个大节介绍了数据是如何在各个组件中流通的。 数据的流动通过以下组件: MySQL 数据源生成 Binlog。Canal 读取 Binlog,生成 Canal json,推送到 Kafka 指定的 Topic 中。Flink 应用 flink-sql-connector-kafka API,生产 Kafka Topic 中的数据。Flink 在通过 flink-connector-jdbc,将数据写入到 TiDB 中。TiDB + Flink 的构造,反对开发与运行多种不同品种的应用程序。目前次要的个性次要包含: ...

May 21, 2021 · 10 min · jiezi

关于flink:开通指南-实时计算-Flink-全托管版本

简介: 【开明指南】实时计算 Flink 全托管版本 1、试用的实时计算 Flink 版产品是后付费还是预付费?是否有额定费用产生? 预付费,有额定的SLB费用,一天2元封顶。(开明 Flink 全托管产品,需应用按量付费 SLB 从公网拜访开发控制台产生费用,1小时≈5分钱,2元/天封顶,欠费后请续费以失常拜访开发控制台;如果欠费超过7天,将会开释,开释后不能再拜访开发控制台。) 2、新用户是否限度同人? 同人多个账号参加:限度; 每个人参加次数:限度 1 次 3、试用完结后客户实例的状态,是否存在进行服务及数据失落或额外收费的状况? 购买时默认不主动续费,只有不本人点击续费,试用完结不会扣钱,试用完结后数据保留7天且会短信告诉,7天后仍然没有续费则数据和实例一起开释隐没。 4、“飞天会员福利日”流动奖品的邮寄时长? 邮寄时长约3天,如无意外状况,流动完结后10天能够到手开明操作指南 一、流程概要:1.登陆阿里云账号2.点击实时计算控制台链接, 点击购买 Flink 全托管,进行实名认证,以及RAM受权3.抉择【包年包月】、【10CU】全托管产品限时优惠99元开明并付款4.集体体验99元/首月优惠福利,收费认证飞天会员享受首月0元试用! 二、步骤合成前情提要 开明工作请务必按文档开明,抉择【包年包月】,【10CU】。SLB 是为了能从公网拜访开发控制台,SLB 绑定的是按量付费的 SLB 欠费后不能拜访开发控制台,续费即可,1个小时大略5分钱左右,欠费超时会被开释,开释后集群不能应用,需从新购买。 0.登陆账号 登陆本人的阿里云账号 1.关上实时计算控制台 点击【购买产品】,进行实名认证,如已认证请进行下部操作 2.进行RAM受权 3.呈现 Flink 全托管页面,根本配置 【包年包月】肯定要抉择包年包月【1个月】主动生成,不须要调整【主动续费】可依据本身状况抉择【地区】可依据本身状况抉择,记住地区,前面创立的时候会用到(留神:Flink 云原生集群只能拜访雷同区域下的上下游存储)【可用区】每选定一个区域,可用区是固定的,记住这个可用区,前面创立交换机的时候会用到 4.网络配置 【专有网络】创立专有网络,如呈现地区/可用区选项要填写根本配置外面的地区和可用区(留神:如果该账号下有上下游存储,要留神抉择和存储在雷同 VPC 下的 ID)【虚构交换机】打对号,开明账号下没有虚构交换机须要创立和根本配置中雷同可用区下的交换机,如下图: 5.工作配置10CU 【工作空间名称】【计算资源配额】10 CU,肯定要10CU 6.创立存储配置 【OSS存储】用于 jar 存储和 state 存储,如果没有点击创立,跳转到 oss 控制台中进行创立,且区域抉择和根底配置雷同的区域 创立区域抉择“根本配置”时抉择的地区 7.核查金额再次核查99元,并点击确认订单,实现付款;特地阐明认证飞天会员后会显示0元。 十分重要! 原文链接本文为阿里云原创内容,未经容许不得转载。

May 19, 2021 · 1 min · jiezi

关于flink:Apache-Flink在-bilibili-的多元化探索与实践

本文由 bilibili 大数据实时平台负责人郑志升分享,本次分享外围解说万亿级传输散发架构的落地,以及 AI 畛域如何基于 Flink 打造一套欠缺的预处理实时 Pipeline。本次分享次要围绕以下四个方面: 一、B 站实时的前世与今生 二、Flink On Yarn 的增量化管道的计划 三、Flink 和 AI 方向的一些工程实际 四、将来的倒退与思考 一、B 站实时的前世与今生1. 生态场景辐射说起实时计算的将来,关键词就在于数据的实效性。首先从整个大数据倒退的生态上,来看它的外围场景辐射:在大数据倒退的初期,外围是以面向天为粒度的离线计算的场景。 那时候的数据实效性少数都是以运算以天为单位,它更加重视工夫和老本的均衡。 随着数据利用,数据分析以及数据仓库的遍及与欠缺,越来越多的人对数据的实效性提出了更高的要求。比方,当须要做一些数据的实时举荐时,数据的实效将决定它的价值。在这种状况下,整个实时计算的场景就广泛诞生。 但在理论的运作过程当中,也遇到了很多场景 ,其实并没有对数据有十分高的实时性要求,在这种状况下必然会存在数据从毫秒,秒或者天的新的一些场景,实时场景数据更多是以分钟为粒度的一些增量计算的场景。对于离线计算,它更加重视老本;对实时计算,它更加重视价值实效;而对于增量计算,它更加重视去均衡老本,以及综合的价值和工夫。 2. B 站的时效性在三个维度上,B 站的划分是怎么的?对于 B 站而言 ,目前有 75% 的数据是通过离线计算来进行撑持的,另外还有 20% 的场景是通过实时计算, 5% 是通过增量计算。 对于实时计算的场景, 次要是利用在整个实时的机器学习、实时举荐、广告搜寻、数据利用、实时渠道剖析投放、报表、olap、监控等;对于离线计算,数据辐射面广,次要以数仓为主;对于增量计算,往年才启动一些新的场景,比如说 binlog 的增量 Upsert 场景。 3. ETL 时效性差对于实效性问题 ,其实晚期遇到了很多痛点 ,外围集中在三个方面: 第一,传输管道不足计算能力。晚期的计划,数据根本都是要按天落到 ODS ,DW 层是凌晨过后的第二天去扫描前一天所有 ODS 层的数据,也就是说,整体数据没方法前置荡涤;第二,含有大量作业的资源集中暴发在凌晨之后,整个资源编排的压力就会十分大;第三、实时和离线的 gap 是比拟难满足的,因为对于大部分的数据来说,纯实时的老本过高,纯离线的实效又太差。同时,MySQL 数据的入仓时效也不太够。举个例子,好比 B 站的弹幕数据 ,它的体量十分夸大,这种业务表的同步往往须要十几个小时,而且十分的不稳固。 4. AI 实时工程简单除了实效性的问题 晚期还遇到了 AI 实时工程比较复杂的问题: ...

May 18, 2021 · 5 min · jiezi

关于Flink:百信银行基于-Apache-Hudi-实时数据湖演进方案

简介: 本文介绍了百信银行实时计算平台的建设状况,实时数据湖构建在 Hudi 上的计划和实际办法,以及实时计算平台集成 Hudi 和应用 Hudi 的形式。本文介绍了百信银行实时计算平台的建设状况,实时数据湖构建在 Hudi 上的计划和实际办法,以及实时计算平台集成 Hudi 和应用 Hudi 的形式。内容包含: 背景百信银行基于 Flink 的实时计算平台设计与实际百信银行实时计算平台与实时数据湖的集成实际百信银行实时数据湖的将来总结 一、背景百信银行,全称为 “中信百信银行股份有限公司”,是首家获批独立法人模式的直销银行。作为首家国有控股的互联网银行,相比于传统金融行业,百信银行对数据敏捷性有更高的要求。 数据麻利,不仅要求数据的准确性,还要求数据达到的实时性,和数据传输的安全性。为了满足我行数据敏捷性的需要,百信银行大数据部承当起了建设实时计算平台的职责,保障了数据疾速,平安且规范得在线送达。 受害于大数据技术的倒退和更新迭代,目前广为人知的批流一体的两大支柱别离是:“对立计算引擎” 与 “对立存储引擎”。 Flink,作为大数据实时计算畛域的佼佼者,1.12 版本的公布让它进一步晋升了对立计算引擎的能力;同时随着数据湖技术 Hudi 的倒退,对立存储引擎也迎来了新一代技术改革。在 Flink 和 Hudi 社区倒退的根底上,百信银行构建了实时计算平台,同时将实时数据湖 Hudi 集成到实时计算平台之上。联合行内数据治理的思路,实现了数据实时在线、安全可靠、规范对立,且有麻利数据湖的指标。 二、百信银行基于 Flink 的实时计算平台设计与实际1. 实时计算平台的定位实时计算平台作为行级实时计算平台,由大数据 IaaS 团队自主研发,是一款实现了实时数据 ”端到端“ 的在线数据加工解决的企业级产品。 其外围性能具备了实时采集、实时计算、实时入库、简单工夫解决、规定引擎、可视化治理、一键配置、自主上线,和实时监控预警等。目前其反对的场景有实时数仓、断点召回、智能风控、对立资产视图、反欺诈,和实时特色变量加工等。并且,它服务着行内小微、信贷、反欺诈、消金、财务,和危险等泛滥业务线。截止目前,在线稳固运行的有 320+ 的实时工作,且在线运行的工作 QPS 日均达到 170W 左右。 2. 实时计算平台的架构依照性能来划分的话,实时计算平台的架构次要分为三层: ■ 1)数据采集层采集层目前次要分为两个场景: 第一个场景是采集 MySQL 备库的 Binlog 日志到 Kafka 中。我行所应用的数据采集计划并没有采纳业界广泛用的如 Canal,Debezium 等现有的 CDC 计划。1、因为咱们的 MySQL 版本为百信银行外部的版本,Binlog 协定有所不同,所以现有的技术计划不能很好的反对兼容咱们获取 Binlog 日志。 2、同时,为了解决咱们数据源 MySQL 的备库随时可能因为多机房切换,而造成采集数据失落的状况。咱们自研了读取 MySQL Binlog 的 Databus 我的项目,咱们也将 Databus 逻辑转化成了 Flink 应用程序,并将其部署到了 Yarn 资源框架中,使 Databus 数据抽取能够做到高可用,且资源可控。 ...

May 14, 2021 · 2 min · jiezi

关于flink:百信银行基于-Apache-Hudi-实时数据湖演进方案

本文介绍了百信银行实时计算平台的建设状况,实时数据湖构建在 Hudi 上的计划和实际办法,以及实时计算平台集成 Hudi 和应用 Hudi 的形式。内容包含: 背景百信银行基于 Flink 的实时计算平台设计与实际百信银行实时计算平台与实时数据湖的集成实际百信银行实时数据湖的将来总结一、背景百信银行,全称为 “中信百信银行股份有限公司”,是首家获批独立法人模式的直销银行。作为首家国有控股的互联网银行,相比于传统金融行业,百信银行对数据敏捷性有更高的要求。 数据麻利,不仅要求数据的准确性,还要求数据达到的实时性,和数据传输的安全性。为了满足我行数据敏捷性的需要,百信银行大数据部承当起了建设实时计算平台的职责,保障了数据疾速,平安且规范得在线送达。 受害于大数据技术的倒退和更新迭代,目前广为人知的批流一体的两大支柱别离是:“对立计算引擎” 与 “对立存储引擎”。 Flink,作为大数据实时计算畛域的佼佼者,1.12 版本的公布让它进一步晋升了对立计算引擎的能力;同时随着数据湖技术 Hudi 的倒退,对立存储引擎也迎来了新一代技术改革。在 Flink 和 Hudi 社区倒退的根底上,百信银行构建了实时计算平台,同时将实时数据湖 Hudi 集成到实时计算平台之上。联合行内数据治理的思路,实现了数据实时在线、安全可靠、规范对立,且有麻利数据湖的指标。 二、百信银行基于 Flink 的实时计算平台设计与实际1. 实时计算平台的定位实时计算平台作为行级实时计算平台,由大数据 IaaS 团队自主研发,是一款实现了实时数据 ”端到端“ 的在线数据加工解决的企业级产品。 其外围性能具备了实时采集、实时计算、实时入库、简单工夫解决、规定引擎、可视化治理、一键配置、自主上线,和实时监控预警等。目前其反对的场景有实时数仓、断点召回、智能风控、对立资产视图、反欺诈,和实时特色变量加工等。并且,它服务着行内小微、信贷、反欺诈、消金、财务,和危险等泛滥业务线。截止目前,在线稳固运行的有 320+ 的实时工作,且在线运行的工作 QPS 日均达到 170W 左右。 2. 实时计算平台的架构依照性能来划分的话,实时计算平台的架构次要分为三层: ■ 1)数据采集层采集层目前次要分为两个场景: 第一个场景是采集 MySQL 备库的 Binlog 日志到 Kafka 中。我行所应用的数据采集计划并没有采纳业界广泛用的如 Canal,Debezium 等现有的 CDC 计划。 1、因为咱们的 MySQL 版本为百信银行外部的版本,Binlog 协定有所不同,所以现有的技术计划不能很好的反对兼容咱们获取 Binlog 日志。2、同时,为了解决咱们数据源 MySQL 的备库随时可能因为多机房切换,而造成采集数据失落的状况。咱们自研了读取 MySQL Binlog 的 Databus 我的项目,咱们也将 Databus 逻辑转化成了 Flink 应用程序,并将其部署到了 Yarn 资源框架中,使 Databus 数据抽取能够做到高可用,且资源可控。第二个场景是,咱们对接了第三方的利用,这个第三方利用会将数据写入 Kafka,而写入 Kafka 有两种形式: ...

May 13, 2021 · 2 min · jiezi

关于flink:Flink-实时计算在微博的应用

简介: 微博通过将 Flink 实时流计算框架跟业务场景相结合,在平台化、服务化方面做了很大的工作,在开发效率、稳定性方面也做了很多优化。咱们通过模块化设计和平台化开发,进步开发效率。 微博机器学习研发核心数据计算负责人,高级零碎工程师曹富强为大家带来 Flink 实时计算在微博的利用介绍。内容包含: 1、微博介绍2、数据计算平台介绍3、Flink 在数据计算平台的典型利用 一、微博介绍本次给大家带来的分享是 Flink 实时计算在微博的利用。微博是中国当先的社交媒体平台,目前的日沉闷用户是 2.41 亿,月沉闷用户是 5.5 亿,其中移动用户占比超过了 94%。 二、数据计算平台介绍1. 数据计算平台详情下图为数据计算平台的架构图。 首先是调度,这块基于 K8s 和 Yarn 别离部署了实时数据处理的 Flink、Storm,以及用于离线解决的 SQL 服务。在集群之上,咱们部署了微博的 AI 平台,通过这个平台去对作业、数据、资源、样本等进行治理。在平台之上咱们构建了一些服务,通过服务化的形式去反对各个业务方。-实时计算这边的服务次要包含数据同步、内容去重、多模态内容了解、实时特色生成、实时样本拼接、流式模型训练,这些是跟业务关系比拟严密的服务。另外,还反对 Flink 实时计算和 Storm 实时计算,这些是比拟通用的根底计算框架。-离线这部分,联合 Hive 的 SQL,SparkSQL 构建一个 SQL 计算服务,目前曾经反对了微博外部绝大多数的业务方。数据的输入是采纳数仓、特色工程这些数据中台的组建,对外提供数据输入。整体上来说,目前咱们在线跑的实时计算的作业将近 1000 多个,离线作业超过了 5000 多个,每天解决的数据量超过了 3 PB。 2. 数据计算上面两张图是数据计算,其中一个是实时计算,另外一个是离线计算。 实时计算次要包含实时的特色生成,多媒体特色生成和实时样本生成,这些跟业务关系比拟严密。另外,也提供一些根底的 flink 实时计算和 storm 实时计算。离线计算次要包含 SQL 计算。次要包含 SQL 的即席查问、数据生成、数据查问和表治理。表治理次要就是数仓的治理,包含表的元数据的治理,表的应用权限,还有表的上下游的血缘关系。 3. 实时特色如下图所示,咱们基于 Flink 和 Storm 构建了一个实时特色生成的服务。整体上来说,它会分为作业详情、输出源特色生成、输入和资源配置。用户依照咱们当时定义好的接口去开发特色生成的 UDF 就能够。其余的像输出、特色写入,都是平台主动提供的,用户只须要在页面上配置就好。另外,平台会提供输出数据源的监控、作业的异样监控、特色写入监控、特色读取监控等,这些都是主动生成的。 4. 流批一体上面介绍咱们基于 FlinkSQL 构建的批流一体。首先,咱们会对立元数据,将实时日志跟离线日志通过元数据管理平台去对立。对立之后,用户在提交作业的时候,咱们会有一个对立的调度层。调度这一块,是依据作业的类型,作业的特点,目前集群的负载的状况,将作业调度到不同的集群下来。 ...

May 13, 2021 · 2 min · jiezi

关于flink:实时计算框架Flink集群搭建与运行机制

一、Flink概述1、根底简介Flink是一个框架和分布式解决引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。次要个性包含:批流一体化、精细的状态治理、事件工夫反对以及准确一次的状态一致性保障等。Flink不仅能够运行在包含YARN、Mesos、Kubernetes在内的多种资源管理框架上,还反对在裸机集群上独立部署。在启用高可用选项的状况下,它不存在单点生效问题。 这里要阐明两个概念: 边界:无边界和有边界数据流,能够了解为数据的聚合策略或者条件;状态:即执行程序上是否存在依赖关系,即下次执行是否依赖上次后果;2、利用场景Data Driven 事件驱动型利用毋庸查问近程数据库,本地数据拜访使得它具备更高的吞吐和更低的提早,以反欺诈案例来看,DataDriven把解决的规定模型写到DatastreamAPI中,而后将整个逻辑形象到Flink引擎,当事件或者数据流入就会触发相应的规定模型,一旦触发规定中的条件后,DataDriven会疾速解决并对业务利用进行告诉。 Data Analytics 和批量剖析相比,因为流式剖析省掉了周期性的数据导入和查问过程,因而从事件中获取指标的提早更低。不仅如此,批量查问必须解决那些由定期导入和输出有界性导致的人工数据边界,而流式查问则毋庸思考该问题,Flink为继续流式剖析和批量剖析都提供了良好的反对,实时处理剖析数据,利用较多的场景如实时大屏、实时报表。 Data Pipeline 与周期性的ETL作业工作相比,继续数据管道能够明显降低将数据挪动到目标端的提早,例如基于上游的StreamETL进行实时荡涤或扩大数据,能够在上游构建实时数仓,确保数据查问的时效性,造成高时效的数据查问链路,这种场景在媒体流的举荐或者搜索引擎中非常常见。 二、环境部署1、安装包治理[root@hop01 opt]# tar -zxvf flink-1.7.0-bin-hadoop27-scala_2.11.tgz[root@hop02 opt]# mv flink-1.7.0 flink1.72、集群配置治理节点 [root@hop01 opt]# cd /opt/flink1.7/conf[root@hop01 conf]# vim flink-conf.yamljobmanager.rpc.address: hop01散布节点 [root@hop01 conf]# vim slaveshop02hop03两个配置同步到所有集群节点上面。 3、启动与进行/opt/flink1.7/bin/start-cluster.sh/opt/flink1.7/bin/stop-cluster.sh启动日志: [root@hop01 conf]# /opt/flink1.7/bin/start-cluster.shStarting cluster.Starting standalonesession daemon on host hop01.Starting taskexecutor daemon on host hop02.Starting taskexecutor daemon on host hop03.4、Web界面拜访:http://hop01:8081/ 三、开发入门案例1、数据脚本散发一个数据脚本到各个节点: /var/flink/test/word.txt2、引入根底依赖这里基于Java写的根底案例。 <dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.11</artifactId> <version>1.7.0</version> </dependency></dependencies>3、读取文件数据这里间接读取文件中的数据,通过程序流程剖析出每个单词呈现的次数。 ...

May 9, 2021 · 2 min · jiezi

关于flink:Flink-on-Zeppelin-系列之Yarn-Application-模式支持

作者:章剑锋(简锋) 去年Flink Forward在讲Flink on Zeppelin这个我的项目的将来时咱们谈到了对Application 模式的反对,明天就有一个好消息要通知大家,社区曾经实现了这一Feature,欢送大家下载最新版来应用这个Feature。Application mode 是 Flink 1.11 之后引入的新的运行模式,所要解决的问题就是缩小客户端的压力,把用户的main函数运行在JobManager里而不是在用户客户端。这种模式是非常适合Flink on Zeppelin的,因为Flink on Zeppelin的客户端就是Flink interpreter过程,而Flink interpreter是一个long running的main函数,一直承受来自前端的命令,进行相应的操作(比方提交Job,进行Job 等等)。接下来咱们就要具体讲下Zeppelin如何实现了Yarn Application模式,以及如何应用这一模式。 架构在讲Yarn Application模式架构的时候,咱们顺便来讲下 Flink on Zeppelin的架构演变过程。 一般的Flink on Yarn 运行模式这种模式的客户端中,Flink Interpreter 运行在 Zeppelin这边,每个客户端对应一个Yarn上的Flink Cluster,如果Flink Interpreter过程很多,会对Zeppelin这台机器造成很大的压力。 参考文档:https://www.yuque.com/jeffzhangjianfeng/gldg8w/wt1g3h 参考视频:https://www.bilibili.com/video/BV1Te411W73b?p=6 Yarn Interpreter 模式Yarn Interpreter 把客户端 (Flink Interpreter)移到了 Yarn集群,把资源压力转移到了Yarn集群,解决上下面一般Flink on Yarn 运行模式的一部分问题,这种模式会须要为每个Flink Cluster额定申请一个Yarn Container来运行这个Flink Interpreter,在资源利用方面并不是很高效。 参考文档:https://www.yuque.com/jeffzhangjianfeng/gldg8w/gcah8t 参考视频:https://www.bilibili.com/video/BV1Te411W73b?p=24 Yarn Application 模式Yarn Application 模式彻底解决了后面2种模式的问题,把Flink interpreter 跑在了JobManager里,这样既不影响Zeppelin Server这台机器的资源压力,也不会对Yarn集群资源造成任何节约。 如何应用 Yarn Application 模式配置Yarn Application 模式非常简单,只有把 flink.execution.mode 设为yarn_application 即可。其余所有配置与其余模式没有区别。上面的所有Flink on Zeppelin的个性在Yarn Application模式下都能够照常应用。咱们也借这个机会来Review下Flink on Zeppelin的所有性能。 ...

May 6, 2021 · 1 min · jiezi

关于Flink:Flink学习笔记

1 概述Flink是什么? Stateful Computations over Data Streams 即 有状态的计算流框架(大数据计算框架) 什么叫做状态? 对源源不断过去的数据,晓得数据的状态。 flink的特点:基于事件处理的框架,即来一条数据就解决一条数据sparkstreaming: 基于工夫来解决数据,即一个很小的时间段内的数据作为一个批次进行解决。目前离线批处理spark强,实时处理flink强。无界数据流:无界数据流有一个开始然而没有完结,它们不会在生成时终止并提供数据,必须间断解决无界流,也就是说必须在获取后立刻解决event。对于无界数据流咱们无奈期待所有数据都达到,因为输出是无界的,并且在任何工夫点都不会实现。解决无界数据通常要求以特定程序(例如事件产生的程序)获取event,以便可能推断后果完整性。有界数据流:有界数据流有明确定义的开始和完结,能够在执行任何计算之前通过获取所有数据来解决有界流,解决有界流不须要有序获取,因为能够始终对有界数据集进行排序,有界流的解决也称为批处理。

May 3, 2021 · 1 min · jiezi

关于Flink:如何从-0-到-1-开发-PyFlink-API-作业

背景Apache Flink 作为以后最风行的流批对立的计算引擎,在实时 ETL、事件处理、数据分析、CEP、实时机器学习等畛域都有着宽泛的利用。从 Flink 1.9 开始,Apache Flink 社区开始在原有的 Java、Scala、SQL 等编程语言的根底之上,提供对于 Python 语言的反对。通过 Flink 1.9 ~ 1.12 以及行将公布的 1.13 版本的多个版本的开发,目前 PyFlink API 的性能曾经日趋完善,能够满足绝大多数状况下 Python 用户的需要。接下来,咱们以 Flink 1.12 为例,介绍如何应用 Python 语言,通过 PyFlink API 来开发 Flink 作业。 环境筹备第一步:装置 PythonPyFlink 仅反对 Python 3.5+,您首先须要确认您的开发环境是否已装置了 Python 3.5+,如果没有的话,首先须要装置 Python 3.5+。 第二步:装置 JDK咱们晓得 Flink 的运行时是应用 Java 语言开发的,所以为了执行 Flink 作业,您还须要装置 JDK。Flink 提供了对于 JDK 8 以及 JDK 11 的全面反对,您须要确认您的开发环境中是否曾经装置了上述版本的 JDK,如果没有的话,首先须要装置 JDK。 第三步:装置 PyFlink接下来须要装置 PyFlink,能够通过以下命令进行装置: # 创立 Python 虚拟环境python3 -m pip install virtualenvvirtualenv -p `which python3` venv# 应用上述创立的 Python 虚拟环境./venv/bin/activate# 装置 PyFlink 1.12python3 -m pip install apache-flink==1.12.2作业开发PyFlink Table API 作业咱们首先介绍一下如何开发 PyFlink Table API 作业。 ...

April 28, 2021 · 9 min · jiezi

关于Flink:Flink在唯品会的实践

唯品会自 2017 年开始基于 k8s 深刻打造高性能、稳固、牢靠、易用的实时计算平台,反对唯品会外部业务在平时以及大促的安稳运行。现平台反对 Flink、Spark、Storm 等支流框架。本文次要分享 Flink 的容器化实际利用以及产品化教训。GitHub 地址https://github.com/apache/flink欢送大家给 Flink 点赞送 star~ 1. 倒退概览平台反对公司外部所有部门的实时计算利用。次要的业务包含实时大屏、举荐、试验平台、实时监控和实时数据荡涤等。 1.1 集群规模 平台现有异地双机房双集群,具备 2000 多的物理机节点,利用 k8s 的 namespaces,labels 和 taints 等,实现业务隔离以及初步的计算负载隔离。目前线上实时利用有大略 1000 个,平台最近次要反对 Flink SQL 工作的上线。 1.2 平台架构 上图是唯品会实时计算平台的整体架构。 最底层是计算工作节点的资源调度层,理论是以 deployment 的模式运行在 k8s 上,平台尽管反对 yarn 调度,然而 yarn 调度是与批工作共享资源,所以支流工作还是运行在 k8s 上。存储层这一层,反对公司外部基于 kafka 实时数据 vms,基于 binlog 的 vdp 数据和原生 kafka 作为音讯总线,状态存储在 hdfs 上,数据次要存入 redis,mysql,hbase,kudu,clickhouse 等。计算引擎层,平台反对 Flink,Spark,Storm 支流框架容器化,提供了一些框架的封装和组件等。每个框架会都会反对几个版本的镜像满足不同的业务需要。平台层提供作业配置、调度、版本治理、容器监控、job监控、告警、日志等性能,提供多租户的资源管理(quota,label 治理),提供 kafka 监控。在 Flink 1.11 版本之前,平台自建元数据管理系统为 Flink SQL 治理 schema,1.11 版本开始,通过 hive metastore 与公司元数据管理系统交融。最上层就是各个业务的应用层。2. Flink容器化实际2.1 容器化实际 ...

April 27, 2021 · 4 min · jiezi

关于flink:Flink-在唯品会的实践

简介: Flink 在唯品会的容器化实际利用以及产品化教训。唯品会自 2017 年开始基于 k8s 深刻打造高性能、稳固、牢靠、易用的实时计算平台,反对唯品会外部业务在平时以及大促的安稳运行。现平台反对 Flink、Spark、Storm 等支流框架。本文次要分享 Flink 的容器化实际利用以及产品化教训。内容包含: 倒退概览Flink 容器化实际Flink SQL 平台化建设利用案例将来布局 一 、倒退概览 平台反对公司外部所有部门的实时计算利用。次要的业务包含实时大屏、举荐、试验平台、实时监控和实时数据荡涤等。 1.1 集群规模 平台现有异地双机房双集群,具备 2000 多的物理机节点,利用 k8s 的 namespaces,labels 和 taints 等,实现业务隔离以及初步的计算负载隔离。目前线上实时利用有大略 1000 个,平台最近次要反对 Flink SQL 工作的上线。 1.2 平台架构 上图是唯品会实时计算平台的整体架构。 最底层是计算工作节点的资源调度层,理论是以 deployment 的模式运行在 k8s 上,平台尽管反对 yarn 调度,然而 yarn 调度是与批工作共享资源,所以支流工作还是运行在 k8s 上。 存储层这一层,反对公司外部基于 kafka 实时数据 vms,基于 binlog 的 vdp 数据和原生 kafka 作为音讯总线,状态存储在 hdfs 上,数据次要存入 redis,mysql,hbase,kudu,clickhouse 等。 计算引擎层,平台反对 Flink,Spark,Storm 支流框架容器化,提供了一些框架的封装和组件等。每个框架会都会反对几个版本的镜像满足不同的业务需要。平台层提供作业配置、调度、版本治理、容器监控、job 监控、告警、日志等性能,提供多租户的资源管理(quota,label 治理),提供 kafka 监控。在 Flink 1.11 版本之前,平台自建元数据管理系统为 Flink SQL 治理 schema,1.11 版本开始,通过 hive metastore 与公司元数据管理系统交融。 ...

April 27, 2021 · 4 min · jiezi

关于flink:贝壳基于-Flink-的实时计算演进之路

简介: 贝壳找房在实时计算之路上的平台建设以及实时数仓利用。摘要:贝壳找房大数据平台实时计算负责人刘力云带来的分享内容是贝壳找房的实时计算演进之路,内容如下: 倒退历程平台建设实时数仓及其利用场景事件驱动场景将来布局GitHub 地址https://github.com/apache/fli... Flink 点赞送 star~ 一、倒退历程 首先是平台的倒退历程。最早是因为业务方在实时计算方面有比拟多的业务场景,包含业务方自研的实时工作,须要自行开发、部署及保护,咱们的大数据部门也会承接客户大数据的实时开发需要。 这些看起来都是一些烟囱式的开发架构(即每个业务线之间由不同的开发团队独立建设,技术栈不同,互不分割),不足对立的工作管控,也很难保留开发过程中积攒的技术积淀。因而,咱们在 18 年时上线了基于 Spark Streaming 的实时计算平台,对立部署治理实时计算工作。之后咱们又在此基础上提供了工作开发性能 - 标准化的 SQL 语言(SQL 1.0),以进步数据开发效率。 随着咱们承接的工作越来越多,咱们也发现了 Spark Streaming 的一些应用问题,次要是其 Checkpoint 是同步的,有时会造成比拟大的提早。此外,Kafka 生产的 Offset 数据存在 Checkpoint,很难做到工作细粒度的监控,比方生产状态的获取,于是咱们开始转向 Flink。 19 年,咱们的平台开始反对 Flink 工作,并且很快提供了基于 Flink 1.8 的 SQL 2.0 性能,包含 DDL 定义和维表关联。接下来,在 SQL 2.0 的根底上,咱们开始了实时数仓的建设。 今年初,在收集了业务方的需要场景后,咱们认为在实时事件处理方面需要明确,而且目前的实现也存在较多的弊病,因而咱们开始着手事件处理平台的开发。往年公布的 Flink 1.11 在 SQL 方面有很大的晋升,咱们在其根底上正在开发一套对立的 SQL(3.0)。 目前平台反对的部门涵盖了贝壳绝大部分的业务方,反对各种场景,包含人店相干的房源、客源、经纪人、风控以及经营等。 目前平台反对的我的项目有 30 多个。在 SQL2.0 后,平台上的工作数有显著增长,达到 800 多个。因为贝壳所有的流量数据、用户行为剖析、以及数仓的建设都是通过平台来构建的,所以数据量很大,每天解决的音讯达 2500 亿条,单任务的音讯吞吐量峰值达 3 百万。 ...

April 27, 2021 · 2 min · jiezi

关于Flink:贝壳基于-Flink-的实时计算演进之路

摘要:贝壳找房大数据平台实时计算负责人刘力云带来的分享内容是贝壳找房的实时计算演进之路,内容如下: 倒退历程平台建设实时数仓及其利用场景事件驱动场景将来布局GitHub 地址https://github.com/apache/flink欢送大家给 Flink 点赞送 star~ 一、倒退历程首先是平台的倒退历程。最早是因为业务方在实时计算方面有比拟多的业务场景,包含业务方自研的实时工作,须要自行开发、部署及保护,咱们的大数据部门也会承接客户大数据的实时开发需要。 这些看起来都是一些烟囱式的开发架构(即每个业务线之间由不同的开发团队独立建设,技术栈不同,互不分割),不足对立的工作管控,也很难保留开发过程中积攒的技术积淀。因而,咱们在 18 年时上线了基于 Spark Streaming 的实时计算平台,对立部署治理实时计算工作。之后咱们又在此基础上提供了工作开发性能 - 标准化的 SQL 语言(SQL 1.0),以进步数据开发效率。 随着咱们承接的工作越来越多,咱们也发现了 Spark Streaming 的一些应用问题,次要是其 Checkpoint 是同步的,有时会造成比拟大的提早。此外,Kafka 生产的 Offset 数据存在 Checkpoint,很难做到工作细粒度的监控,比方生产状态的获取,于是咱们开始转向 Flink。 19 年,咱们的平台开始反对 Flink 工作,并且很快提供了基于 Flink 1.8 的 SQL 2.0 性能,包含 DDL 定义和维表关联。接下来,在 SQL 2.0 的根底上,咱们开始了实时数仓的建设。 今年初,在收集了业务方的需要场景后,咱们认为在实时事件处理方面需要明确,而且目前的实现也存在较多的弊病,因而咱们开始着手事件处理平台的开发。往年公布的 Flink 1.11 在 SQL 方面有很大的晋升,咱们在其根底上正在开发一套对立的 SQL(3.0)。 目前平台反对的部门涵盖了贝壳绝大部分的业务方,反对各种场景,包含人店相干的房源、客源、经纪人、风控以及经营等。 目前平台反对的我的项目有 30 多个。在 SQL2.0 后,平台上的工作数有显著增长,达到 800 多个。因为贝壳所有的流量数据、用户行为剖析、以及数仓的建设都是通过平台来构建的,所以数据量很大,每天解决的音讯达 2500 亿条,单任务的音讯吞吐量峰值达 3 百万。 这是咱们平台工作的增长状况,能够显著看到 19 年 10 月 SQL 2.0 上线且反对实时数仓开发后,工作增长势头显著。 ...

April 26, 2021 · 2 min · jiezi

关于flink:Flink-Hudi-在-Linkflow-构建实时数据湖的生产实践

可变数据的解决始终以来都是大数据系统,尤其是实时零碎的一大难点。在调研多种计划后,咱们抉择了 CDC to Hudi 的数据摄入计划,目前在生产环境可实现分钟级的数据实时性,心愿本文所述对大家的生产实践有所启发。内容包含: 背景CDC 和数据湖技术挑战成果将来打算总结一、背景Linkflow 作为客户数据平台(CDP),为企业提供从客户数据采集、剖析到执行的经营闭环。每天都会通过一方数据采集端点(SDK)和三方数据源,如微信,微博等,收集大量的数据。这些数据都会通过荡涤,计算,整合后写入存储。使用者能够通过灵便的报表或标签对长久化的数据进行剖析和计算,后果又会作为 MA (Marketing Automation) 零碎的数据源,从而实现对特定人群的精准营销。 在 Linkflow 中,数据分为不可变数据(Immutable Data)和可变数据(Mutable Data),这些数据都会参加剖析,波及到的表大略有十几张,其中不可变数据的数据量较大,能够达到数十亿级。如果放到传统大数据系统,不可变数据即为事实数据,可变数据为维度数据。但在真正的业务实际里,用户的天然属性,订单的金额和状态等都是可更新的,这些数据的数据量往往也十分可观,在咱们的零碎里此类数据也会达到亿级。对于可变数据之前始终都是通过关系型数据库 MySQL 进行治理,一来数据保护不便,二来业务对接容易。 但问题也不言而喻: 数据碎片化,因为 MySQL 大表 online DDL 危险较大,随着业务复杂度的晋升,往往须要减少新的子表来扩大业务属性,也就是说一个残缺的用户数据会散落在多张表中,这对查问非常不敌对。多维度查问无奈实现,因为关系型数据库的劣势不是多维度查问,并且给所有字段都加索引也并不事实,所以须要一款可反对 OLAP 查问引擎的数据组件来撑持多维分析的业务场景。并且思考到将来可分别独立扩大的可能,咱们也优先思考计算和存储拆散的架构。二、CDC 和数据湖CDC(CHANGE DATA CAPTURE)是一种软件设计模式,用于确定和跟踪已变更的数据,以便能够对更改后的数据采取措施。其实早在两年前咱们就有应用 canal 冗余 MySQL 数据到异构存储的教训,只是过后没有意识到能够通过这种形式与大数据存储进行集成。在应用 canal 的过程中咱们发现了一些性能的问题,并且开源社区根本无人保护,所以在新架构启动前又调研了 Maxwell 和 Debezium,恰好关注到 Flink 母公司 Ververica 开源的我的项目 flink-cdc-connectors[1] ,该我的项目将 Debezium 作为 binlog 的同步引擎嵌入到 Flink 工作中,能够不便地在流工作中对 binlog 的音讯进行筛选、校验、数据整合和格局转换,并且性能优异。思考到将来又能够间接与行为数据进行双流 join,甚至通过 CEP 进行简略的风控,咱们最终抉择了 Debezium in Flink 的 CDC 计划。 因为 MySQL 中的数据主题很多,在流工作中咱们同时也做了数据路由,即不同主题的变动数据会路由到不同的 Kafka Topic 中,行将 Kafka 作为 ODS。这样做的益处很多,首先对于可变数据咱们能够清晰的察看到每次变动的过程,其次能够对数据进行回放,逐次变动的叠加后果便是最终的状态。 ...

April 22, 2021 · 5 min · jiezi

关于flink:融合趋势下基于-Flink-Kylin-Hudi-湖仓一体的大数据生态体系

本文由 T3 出行大数据平台负责人杨华和资深大数据平台开发工程师王祥虎介绍 Flink、Kylin 和 Hudi 湖仓一体的大数据生态体系以及在 T3 的相干利用场景,内容包含: 湖仓一体的架构Flink/Hudi/Kylin 介绍与交融T3 出行联合湖仓一体的实际一、湖仓一体的架构数据湖和数据仓库既然聊湖仓一体,咱们先理解一下什么是湖,什么是仓。数据湖是一个很老的概念,在近些年又被热炒。业界对于数据湖到当初也没有一个对立的定义。AWS 是最早在云上推出数据湖解决方案的云服务提供商,在这里咱们便援用 AWS 对数据湖的定义:“数据湖是一个集中式的存储库,容许存储任意构造的数据并且能将它利用于大数据处理,以及进行实时剖析和机器学习等相干的利用场景。” 同样咱们也借助于 AWS 对数据仓库做这样的定义:“数据仓库是信息的一个地方存储库。” 这里的信息是可对其进行剖析,并且可做出更理智的决策。 这个定义还有具体的开展。AWS 这张图通过展现了从湖到仓的数据流向的关系,来演示数据湖与数据仓库之间的区别和分割。首先数据最后是存在于数据湖或是数据库中,而后通过数据筛选和筹备之后,就会流向数据仓库来进行一些高价值的剖析。这个比照表格很直观的从数据、Schema、性价比、数据品质、用户和剖析这 6 个维度给出数据湖和仓的比照。 湖仓一体的先例往年咱们据说阿里巴巴提及的“湖仓一体”的概念。不晓得大家有没有想过湖仓一体在业界是否有胜利的先例?我集体认为是有的。往年 (2020年)9 月份,一家叫 Snowflake 的公司在纽交所上市。Snowflake 是一家做云数仓的公司,基于云厂商提供的基础设施提供 SaaS 平台,面向中小企业提供数据的托管和剖析服务。Snowflake 自称本人是一家云数仓公司,并且在 16 年的数据顶会上发表了一篇论文来介绍他们弹性数仓的架构以及一些技术的细节。 Snowflake 其实是基于云上的对象存储,一份存储多份计算,并且计算与存储拆散的这样一套架构。其实这就是 AWS 以及当初支流云厂商所主推的这个数据湖的架构。Snowflake上市的首日,他的市值就飙升到了 700 亿美元的规模。所以我集体认为 Snowflake 能够算是履行湖仓一体的一个最胜利的先例。大家能够去理解一下刚谈到的这篇论文。我摘出了这 5 个点来和大家做简略的分享: 首先第一点,是没有走当初传统数仓所广泛应用的 Shared-Nothing 这个架构,而是转向 Shared-Data 这个架构。其次,论文中重点提及的存储和计算拆散,是文中我感觉最有价值的一个观点。他提出了对立存储而后弹性计算的这样一个观点。第三,数仓及服务是我认为他们商业化最胜利的点。它将数仓提供了一个 SaaS 化的体验,并且摒弃传统上大家认为的数仓是大而重的偏见。第四,高可用这一块是进步用户体验和容错的很要害的一个点。最初,结构化延长到半结构化这一块曾经体现过后他们可能摸索湖上通用数据的能力。 这尽管是 16 年的一篇论文,但外面的观点并不算古老并且依然值得咱们去学习。后续咱们会简略介绍几个被咱们排汇并且将会去实际的一些点,而且这些点也是 T3 出行在实现湖仓一体上很要害的中央。 Shared - Nothing 架构的劣势首先,作为一个被很多传统的数仓广泛应用的一个架构,Shared-Nothing 还是有一些架构上的劣势: 第一点,Table 上的数据能够进行跨节点的程度分区,并且每个节点有本人的本地存储。每个节点的计算资源,只关注解决每个节点本人存储的数据。所以它的另一个长处就是它的解决机制绝对简略,是数仓畛域很典型的一个架构。 Shared - Nothing 架构的劣势这套架构其实也有一些有余的中央: 最大的一点就是他耦合了计算与存储资源,同时也带来第二个问题,就是弹性有余。具体能够体现在 2 个方面。 ...

April 19, 2021 · 3 min · jiezi

关于Flink:汽车之家基于-Flink-的数据传输平台的设计与实践

数据接入与传输作为买通数据系统与业务零碎的一道桥梁,是数据系统与架构中不可或缺的一个重要局部。数据传输零碎稳定性和准确性,间接影响整个数据系统服务的 SLA 和品质。此外如何晋升零碎的易用性,保障监控服务并升高系统维护老本,优雅应答劫难等问题也非常重要。 本文介绍了汽车之家实时计算团队利用 Flink 和 Flink 实时平台构建数据传输 SDK 和传输平台并不断完善的实践经验与总结。内容包含: 背景与需要技术选型与设计 —— Why Flink?数据传输零碎的设计架构基于 Flink 的 Binlog 接入 SDK平台应用总结与瞻望一、背景与需要汽车之家(下称之家)作为一家数据智能驱动的公司,人造存在着对数据的各种简单需要,之家的数据系统负责撑持这些业务需要的发展。数据传输零碎,作为其中一环,承当了各类数据导入散发的需要,反对用户订阅数据变更。随着撑持的业务扩增与需要的减少。原来的接入零碎暴露出了肯定的问题和有余: 不足无效的工作与信息管理机制,依赖人工进行工作的治理和运维,信息的统计接入程序资源应用节约,不足弹性针对 DDL 变更问题,不能很好的解决,必要时须要人工染指传输零碎依赖的组件比拟多,比方 Zookeeper,Redis 等代码的技术债累积,代码保护老本变高针对上述问题,咱们决定开发一套新的数据传输和散发零碎,一举解决上述问题。 二、技术选型与设计 —— Why Flink?在发展新零碎的开发工作之前,咱们剖析的可选的计划思路大体分三种: 齐全自研(相似于 otter)复用市面上的开源组件(Maxwell/Canal/Debezium)进行二次开发和整合基于 Flink 进行组件的开发咱们规约出以下次要设计应用指标: 架构设计上要运维治理是敌对的,提供高可用以及故障复原策略,反对异地多活架构设计上要提供强数据准确性,至多承诺 at-least-once 语义架构设计上要对扩缩容是敌对的,能够按需分配资源功能设计上要全面的监控笼罩和欠缺的报警机制,反对元数据信息管理功能设计上要对实时计算是敌对的(1)功能设计上要能齐全进攻 DDL 变更带来的问题此外,在性能指标上,接入零碎的延时和吞吐至多要满足所有业务惯例状态下的需要。 (1) 指与实时计算平台整合的能力方案设计与比照按照设计思路和指标,咱们整顿了计划次要性能的比照表格: (1)Flink 自带高可用和故障复原,实时计算平台在此基础上提供更强的高可用服务 (2)良好的编码 + flink 机制即可实现 Exactly-Once (3)实时计算平台自带工作部署治理能力 (4)实时计算平台自带齐备的监控和治理通过探讨,大家统一决定基于Flink进行新的传输平台的开发: Flink DataStream 的编程模型和 API 在应答数据传输场景上,十分的天然与间接Flink 在框架层面提供了一致性保障和 HA/稳定性/流量控制措施,让咱们能够不用去解决这些开发上比拟艰难和简单的问题,背靠框架即可较为轻松地实现相干工作Flink 人造具备横向纵向扩容的能力,按需应用计算资源即可齐全复用了之家 Flink 实时计算平台已有的组件和能力——齐备的监控报警/工作生命周期治理/异地多活/自助运维等性能咱们的 MVP 版本开发实现大概只破费了不到 3 周的工夫,POC 的后果完全符合预期的性能要求和性能要求。 三、数据传输零碎的设计架构从逻辑层面来看,之家的实时数据传输平台分为 3 局部: 数据传输程序接入工作信息管理模块工作执行 Runtime 模块在实现上: ...

April 15, 2021 · 3 min · jiezi

关于Flink:实时-OLAP-从-0-到-1

简介: BTC.com 团队在实时 OLAP 方面的技术演进过程及生产优化实际。作者|高正炎 本文次要介绍 BTC.com 团队在实时 OLAP 方面的技术演进过程及生产优化实际,内容如下: 业务背景时机挑战架构演进架构优化将来瞻望一、业务背景1.1 业务介绍 - ABCD BTC.com 是一家区块链技术计划提供者,咱们的业务次要分为四个局部,总结来说就是 ABCD:A 是人工智能机器学习,B 是区块链,C 代表云,D 是数据。这些模块不仅互相独立的,也能够相互联合。近几年人工智能、区块链的减速倒退与大数据在背地提供的反对非亲非故。 1.2 业务介绍 - 区块链技术计划提供商 区块链艰深来讲能够了解为一个不可逆的分布式账本,咱们的作用是让大家能更好的浏览账本,开掘账本背地的信息数据。目前比特币的数据量级大略在几十亿到百亿,数据量大略在数十T,当然咱们也有其余的一些业务,如以太坊货币、智能合约剖析服务等。 整体而言咱们是一家区块链技术计划的提供商,提供挖矿的服务。与金融行业的银行一样,咱们也有很多的 OLAP 需要,比方当黑客攻击交易所或供应链进行资产转移或者洗钱时,须要通过链上的操作,咱们能够在链上对其进行剖析,以及交易上的跟踪,统计数据等,为警方提供帮助。 二、时机挑战2.1 之前的架构 大略 2018 年的时候,竞争对手比拟少,咱们整体的架构如上。底层是区块链的节点,通过 Parser 一直的解析到 MySQL ,再从 MySQL 抽取到 Hive 或者 Presto,从 Spark 跑各种定时任务分析数据,再通过可视化的查问,失去报表或者数据。架构的问题也是不言而喻的: 不能做到实时处理数据存在单点问题,比如某一条链路忽然挂掉,此时整个环节都会呈现问题2.2 遇到的需要与挑战 效率,效率问题是十分常见的。咱们的表大略在几十亿量级,跑这种 SQL ,可能须要很长时间, SQL 查问比较慢,重大影响统计效率。实时,数据不是实时的,须要等到肯定的工夫才会更新,如昨天的数据明天能力看到。监控,实时需要,如实时风控,每当区块链呈现一个区块,咱们就要对它进行剖析,然而区块呈现的工夫是随机的。不足残缺的监控,有时候作业忽然坏了,或者是没达到指标,咱们不能及时晓得。2.3 技术选型咱们须要思考什么 在技术选型的时候咱们须要思考什么呢?首先是缩容,2020年行情不太好,大家都在尽力缩减老本,更好的活下去。在老本无限的状况下,咱们如何能做更多的货色,必须进步本身的效率,同时也要保证质量。所以咱们须要找到一种均衡,在老本效率还有品质这三者之间进行肯定的均衡。 三、架构演进3.1 技术选型 俗话说,工具选的好,上班下的早,对于是否引入 Flink,咱们想了很久,它和 Spark 相比劣势在哪里? 咱们理论调研当前,发现 Flink 还是有很多劣势,比方说灵便的窗口,精准的语义,低提早,反对秒级的,实时的数据处理。因为团队自身更纯熟 Python ,所以咱们过后就抉择了 PyFlink ,有业余的开发团队撑持,近几个版本变动比拟大,实现了很多性能。在实时 OLAP 方面,数据库咱们采纳了 ClickHouse 。 ...

April 14, 2021 · 2 min · jiezi

关于Flink:实时-OLAP-从-0-到-1

作者|高正炎 本文次要介绍 BTC.com 团队在实时 OLAP 方面的技术演进过程及生产优化实际,内容如下: 业务背景时机挑战架构演进架构优化将来瞻望一、业务背景1.1 业务介绍 - ABCD BTC.com 是一家区块链技术计划提供者,咱们的业务次要分为四个局部,总结来说就是 ABCD:A 是人工智能机器学习,B 是区块链,C 代表云,D 是数据。这些模块不仅互相独立的,也能够相互联合。近几年人工智能、区块链的减速倒退与大数据在背地提供的反对非亲非故。 1.2 业务介绍 - 区块链技术计划提供商 区块链艰深来讲能够了解为一个不可逆的分布式账本,咱们的作用是让大家能更好的浏览账本,开掘账本背地的信息数据。目前比特币的数据量级大略在几十亿到百亿,数据量大略在数十T,当然咱们也有其余的一些业务,如以太坊货币、智能合约剖析服务等。 整体而言咱们是一家区块链技术计划的提供商,提供挖矿的服务。与金融行业的银行一样,咱们也有很多的 OLAP 需要,比方当黑客攻击交易所或供应链进行资产转移或者洗钱时,须要通过链上的操作,咱们能够在链上对其进行剖析,以及交易上的跟踪,统计数据等,为警方提供帮助。 二、时机挑战2.1 之前的架构 大略 2018 年的时候,竞争对手比拟少,咱们整体的架构如上。底层是区块链的节点,通过 Parser 一直的解析到 MySQL ,再从 MySQL 抽取到 Hive 或者 Presto,从 Spark 跑各种定时任务分析数据,再通过可视化的查问,失去报表或者数据。架构的问题也是不言而喻的: 不能做到实时处理数据存在单点问题,比如某一条链路忽然挂掉,此时整个环节都会呈现问题2.2 遇到的需要与挑战 效率,效率问题是十分常见的。咱们的表大略在几十亿量级,跑这种 SQL ,可能须要很长时间, SQL 查问比较慢,重大影响统计效率。实时,数据不是实时的,须要等到肯定的工夫才会更新,如昨天的数据明天能力看到。监控,实时需要,如实时风控,每当区块链呈现一个区块,咱们就要对它进行剖析,然而区块呈现的工夫是随机的。不足残缺的监控,有时候作业忽然坏了,或者是没达到指标,咱们不能及时晓得。2.3 技术选型咱们须要思考什么 在技术选型的时候咱们须要思考什么呢?首先是缩容,2020年行情不太好,大家都在尽力缩减老本,更好的活下去。在老本无限的状况下,咱们如何能做更多的货色,必须进步本身的效率,同时也要保证质量。所以咱们须要找到一种均衡,在老本效率还有品质这三者之间进行肯定的均衡。 三、架构演进3.1 技术选型 俗话说,工具选的好,上班下的早,对于是否引入 Flink,咱们想了很久,它和 Spark 相比劣势在哪里? 咱们理论调研当前,发现 Flink 还是有很多劣势,比方说灵便的窗口,精准的语义,低提早,反对秒级的,实时的数据处理。因为团队自身更纯熟 Python ,所以咱们过后就抉择了 PyFlink ,有业余的开发团队撑持,近几个版本变动比拟大,实现了很多性能。在实时 OLAP 方面,数据库咱们采纳了 ClickHouse 。 3.2 为什么应用 ClickHouse ...

April 12, 2021 · 2 min · jiezi

关于flink:Flink集成Iceberg在同程艺龙的实践

简介: 本文由同城艺龙大数据开发工程师张军分享,次要介绍同城艺龙 Flink 集成 Iceberg 的生产实践。 本文由同城艺龙大数据开发工程师张军分享,次要介绍同城艺龙 Flink 集成 Iiceberg 的生产实践。内容包含: 背景及痛点Flink + Iceberg 的落地Iceberg 优化实际后续工作收益及总结一、背景及痛点业务背景同程艺龙是一个提供机票、住宿、交通等服务的在线游览服务平台,目前我所在的部门属于公司的研发部门,主要职责是为公司内其余业务部门提供一些根底服务,咱们的大数据系统次要承接的业务是部门内的一些大数据相干的数据统计、剖析工作等。数据起源有网关日志数据、服务器监控数据、K8s 容器的相干日志数据,App 的打点日志, MySQL 的 binlog 日志等。咱们次要的大数据工作是基于上述日志构建实时报表,提供基于 Presto 的报表展现和即时查问服务,同时也会基于 Flink 开发一些实时、批处理工作,为业务方提供精确及时的数据撑持。 原架构计划因为咱们所有的原始数据都是存储在 Kafka 的,所以原来的技术架构就是首先是 Flink 工作生产 Kafka 的数据,通过 Flink SQL 或者 Flink jar 的各种解决之后实时写入 Hive,其中绝大部分工作都是 Flink SQL 工作,因为我认为 SQL 开发绝对代码要简略的多,并且保护不便、好了解,所以能用 SQL 写的都尽量用 SQL 来写。提交 Flink 的平台应用的是 Zeppelin,其中提交 Flink SQL 工作是 Zeppelin 自带的性能,提交 jar 包工作是我本人基于 Application 模式开发的 Zeppelin 插件。对于落地到 Hive 的数据,应用开源的报表零碎 metabase (底层应用 Presto) 提供实时报表展现、定时发送邮件报表,以及自定义 SQL 查问服务。因为业务对数据的实时性要求比拟高,心愿数据能尽快的展现进去,所以咱们很多的 Flink 流式工作的 checkpoint 设置为 1 分钟,数据格式采纳的是 orc 格局。 ...

April 8, 2021 · 3 min · jiezi

关于Flink:Flink集成Iceberg在同程艺龙的实践

本文由同城艺龙大数据开发工程师张军分享,次要介绍同城艺龙 Flink 集成 Iiceberg 的生产实践。内容包含: 背景及痛点Flink + Iceberg 的落地Iceberg 优化实际后续工作收益及总结一、背景及痛点业务背景同程艺龙是一个提供机票、住宿、交通等服务的在线游览服务平台,目前我所在的部门属于公司的研发部门,主要职责是为公司内其余业务部门提供一些根底服务,咱们的大数据系统次要承接的业务是部门内的一些大数据相干的数据统计、剖析工作等。数据起源有网关日志数据、服务器监控数据、K8s 容器的相干日志数据,App 的打点日志, MySQL 的 binlog 日志等。咱们次要的大数据工作是基于上述日志构建实时报表,提供基于 Presto 的报表展现和即时查问服务,同时也会基于 Flink 开发一些实时、批处理工作,为业务方提供精确及时的数据撑持。 原架构计划因为咱们所有的原始数据都是存储在 Kafka 的,所以原来的技术架构就是首先是 Flink 工作生产 Kafka 的数据,通过 Flink SQL 或者 Flink jar 的各种解决之后实时写入 Hive,其中绝大部分工作都是 Flink SQL 工作,因为我认为 SQL 开发绝对代码要简略的多,并且保护不便、好了解,所以能用 SQL 写的都尽量用 SQL 来写。提交 Flink 的平台应用的是 Zeppelin,其中提交 Flink SQL 工作是 Zeppelin 自带的性能,提交 jar 包工作是我本人基于 Application 模式开发的 Zeppelin 插件。对于落地到 Hive 的数据,应用开源的报表零碎 metabase (底层应用 Presto) 提供实时报表展现、定时发送邮件报表,以及自定义 SQL 查问服务。因为业务对数据的实时性要求比拟高,心愿数据能尽快的展现进去,所以咱们很多的 Flink 流式工作的 checkpoint 设置为 1 分钟,数据格式采纳的是 orc 格局。 ...

April 6, 2021 · 3 min · jiezi

关于Flink:Apache-Flink-Meetup-上海站超强数据湖干货等你

你是否有过流批技术栈不对立的抓狂? 你是否有过流批数据对不上的懊恼? 你是否有过,海量数据更新时效性跟不上的无奈? Apache Flink 社区 2021 首场 Meetup 来啦! 4月17日 | 上海 | 线下 来一场 Flink x 数据湖的干货体验之旅~ 本次 Meetup 邀请了来自阿里巴巴、腾讯、Dell 科技团体、汽车之家的四位技术专家,聚焦 Flink 数据湖利用主题,围绕湖仓一体架构实际、Iceberg 和对象存储的数据湖构建计划、超大规模数据入湖实际以及数据入湖面临的挑战等,全方位解析数据湖生产利用难题! 【流动亮点】超多实用干货,从数据湖利用面临的挑战动手,解析数据湖架构降级、对象存储与 Iceberg 的数据湖生态以及百亿数据入湖实际,轻松 get 数据湖正确打开方式;流动模式多样化,线下线上同步开启,同城可参加线下 Meetup 面对面交换,异地也可在线观看直播,精彩内容不错过;丰盛周边等你拿,报名加入就有机会取得超多 Flink 社区定制的精美周边!▼ 立刻报名 ▼https://www.huodongxing.com/e... 嘉宾及议题介绍《汽车之家基于 Apache Iceberg 的湖仓一体架构实际》邸星星 | 汽车之家 实时计算平台负责人 演讲简介: 近年来,批流一体、湖仓一体成为大数据畛域非常炽热的话题,汽车之家也在继续摸索如何对大数据架构进行降级转型,充分发挥“陈腐”数据的价值,为用户带来更好的应用体验。本文将分享汽车之家基于 Apache Iceberg 进行数仓架构降级过程中的一些实际。 嘉宾简介: 邸星星,汽车之家实时计算平台负责人,长期从事实时计算与 OLAP 方面的平台建设工作,致力于为公司提供大规模、高效、稳固的计算与查问服务。 《Iceberg 和对象存储构建数据湖计划》孙伟 | Dell科技团体 高级软件研发经理 演讲简介: 本演讲主题将阐述如何基于对象存储和 Iceberg 来构建数据湖生态。讲述对象存储作为 Iceberg 的数据湖存储撑持所须要解决的一些问题以及优化思路,提供了开源 S3 catalog 可行实现计划,并给出比照其余存储计划(如 HDFS)的劣势。 演讲将进一步给出商业对象存储与 Iceberg 适配的另一种最佳实际办法,并构建 Flink+Iceberg+对象存储的数据湖进行实例演示。同时本演讲将基于面向存储空间优化的思路,通过革新对象存储和 Iceberg 联合形式,给出一种源数据和 Iceberg table 共享数据源的办法来适配不同的利用场景。 ...

April 1, 2021 · 1 min · jiezi

关于Flink:腾讯游戏实时计算应用平台建设实践

本文由腾讯游戏增值服务部数据中心许振文分享,次要介绍腾讯游戏实时计算利用平台的建设实际。内容包含: 建设背景对立实时大数据开发 OneData对立大数据接口服务 OneFun数据服务微服务化 & ServiceMesh 治理一、建设背景首先介绍一下相干背景,很早之前咱们就开始做游戏开发游戏经营,尤其是在五六年前开发过程还是比拟苦楚的。很多玩家心愿玩了游戏之后立马能失去处分,这其实是实时数据营销利用和离线数据营销利用的区别之一。 游戏是一个即时刺激反馈的我的项目,离线数据经营的痛点包含:提早大,体验差,反馈慢。而通过实时数据经营,能够进步用户体验,减少游戏支出,解决离线指标经营痛点,经营干涉越及时,成果越好。 下图是基于咱们数据利用平台衍生进去的一个数据服务工作零碎。很多时候有一个比拟好的工作引擎去驱动一件事件,事件的后果会向一个比拟好的方向去倒退。比方游戏内的工作零碎,玩家有工作能够支付,有处分和反馈,这是游戏中很相熟的场景。 另外一个是排行榜,也是一种刺激性的措施,是对大家致力、后劲或者是能力的一种认可。这种场景十分常见,在游戏外面咱们用的也十分多。这是一个典型的游戏的经营场景,当然这个背地缺离不了数据,尤其缺离不了实时数据。 以下是咱们数据平台演变的过程。 最开始是手工作坊式开发,咱们在接到游戏的数据营销流动开发时,去剖析需要、数据接入、逻辑编码开发、资源申请、公布验证交付,接口开发测试,线上监控,资源回收。这种开发过程门槛高,老本高,效率低,而且数据复用性差,易出错,不易积淀零碎。所以肯定要往平台方向去走。 但同时也须要具备肯定的前提,首先是数据的标准化和数据字典对立。咱们在 10 年到 15 年基本上实现了游戏数据标准化的过程,包含标准化的接入和标准化的字段映射。在此之上,咱们有对立的游戏数据服务,包含数据计算和接口服务。我明天讲的次要就是这一部分,而后在下面可能去撑持各种各样的业务。所以咱们的最终目标也是可能建设一个一站式的开发环境,开发者只关注如何实现逻辑即可,其余联调、运维公布、线上经营保障都由平台提供配置化解决方案。 咱们的开发思路次要有三点。 第一点是规范化。流程标准,数据开发标准和开发框架。第二点是自动化,包含资源分配,公布上线,监控部署。第三点是一体化。从数据开发到数据接口开发,到测试公布和运维监控,要一站式实现。所以咱们形象进去两个外围的服务,一个是数据服务,一个是对立的接口服务开发。因为在我的思考当中,大家做数据给谁去用,用什么样的形式提供数据给大家用,我认为最好的形式是 API 的形式,所有的实时数据可能以 API 的形式提供进来,在数据利用的被动、被动场景之下都能够笼罩到。另外,在这两种场景下必须有一个流程零碎来协调它。 以上是次要的思路,为各种数据利用场景提供一站式的数据开发和利用解决服务,对立流动治理、数据指标计算开发治理和各种数据利用接口自动化生产治理的一站式服务。 二、对立实时大数据开发 OneData首先来看一下游戏数据的链路。数据产生之后,咱们会有一个 data server,而后会把数据传输到音讯队列,音讯队列当初次要是 Kafka,Pulsar 也在逐渐跟上。再到计算层,而后在贮存局部去做一个隔离。再到数据 API 这一层,计算的数据可能间接对外产生场景化的利用。这应该也是大家很多场景当中会想到的一种思路。然而咱们把整个过程都能串起来,在一个站点外面就能实现实现,不须要在多个站点外面跳来跳去,会大大降低技术栈的门槛。 首先是大数据这一块。原来用 C++, Java 去生产 Kafka 音讯队列,然而当初比拟少了。咱们当初从编译测试到提交公布的过程要做到三点, 第一个是指标配置 SQL 化。因为 SQL 化对很多产品人员来说门槛是比拟低的,然而咱们比 SQL 化还要更低,即图形化的 SQL。大家只有选哪张表,哪些字段,计算条件,聚合维度是什么就能够了。明确通知你要填的就是这些字段,从这张表外面选出来就能够。这张表其实就是咱们方才说的接进来的 Kafka 表,所以咱们这块就做了两个方面,一方面是反对根本的 SQL,另一方面大家都不须要懂 SQL,你只须要懂这张表,怎么去设计算法就能够了。第二个是在线 WebIDE。udf 这一块其实是很麻烦的,齐全凋谢是不受控的。咱们到目前为止积攒的 udf 函数不到 100个。如果这 100 个函数官网提供,就不须要去做了。所以咱们提供在线 WebIDE 的形式。第三个就是数据场景化配置,前面具体介绍。 方才说了两个 SQL,一个是 Flink SQL,咱们要原生反对。另外一种就是自研 SQL,它能够图形化的配置,利落拽就能够配置进去,填表单就能够配置进去。除此之外,咱们还提供在线函数的 Jar 包的形式,在这外面咱们要做 SQL 的解析和代码的生成,另外还要做到 JIT 和隔离性,还有日志的对立上报告警。 ...

March 31, 2021 · 2 min · jiezi

关于Flink:Hudi-on-Flink-快速上手指南

摘要:本文由阿里巴巴的陈玉兆分享,次要介绍 Flink 集成 Hudi 的最新版本性能以及疾速上手实际指南。内容包含: 背景环境筹备Batch 模式的读写Streaming 读总结一、背景Apache Hudi 是目前最风行的数据湖解决方案之一,Data Lake Analytics[1] 集成了 Hudi 服务高效的数据 MERGE(UPDATE/DELETE)场景;AWS 在 EMR 服务中 预装置[2] 了 Apache Hudi,为用户提供高效的 record-level updates/deletes 和高效的数据查问治理;Uber [3]曾经稳固运行 Apache Hudi 服务 4 年多,提供了低提早的数据库同步和高效率的查问[4]。自 2016 年 8 月上线以来,数据湖存储规模曾经超过 100PB[5]。 Apache Flink 作为目前最风行的流计算框架,在流式计算场景有人造的劣势,以后,Flink 社区也在踊跃拥抱 Hudi 社区,施展本身 streaming 写/读的劣势,同时也对 batch 的读写做了反对。 Hudi 和 Fink 在 0.8.0 版本做了大量的集成工作[6]。外围的性能包含: 实现了新的 Flink streaming writer反对 batch 和 streaming 模式 reader反对 Flink SQL APIFlink streaming writer 通过 state 实现了高效的 index 计划,同时 Hudi 在 UPDATE/DELETE 上的优良设计使得 Flink Hudi 成为以后最有后劲的 CDC 数据入湖计划,因为篇幅关系,将在后续的文章中介绍。 ...

March 29, 2021 · 8 min · jiezi

关于Flink:Flink-执行引擎流批一体的融合之路

本文由 Apache Flink Committer 马国维分享,次要介绍 Flink 作为大数据计算引擎的流批一体交融之路。内容包含: 1、背景 2、流批一体的分层架构 3、流批一体DataStream 4、流批一体DAG Scheduler 5、流批一体的Shuffle架构 6、流批一体的容错策略 7、将来瞻望 一、背景 随着互联网和挪动互联网的一直倒退,各行各业都积攒海量的业务数据。而企业为了改善用户体验,晋升产品在市场上的竞争力,都采取了实时化形式来解决大数据。社交媒体的实时大屏、电商的实时举荐、城市大脑的实时交通预测、金融行业的实时反欺诈,这些产品的胜利都在阐明大数据处理的实时化曾经成为一个势不可挡的潮流。 在实时化的大趋势下,Flink 曾经成为实时计算行业的事实标准。咱们看到,不光是阿里巴巴,国内外各个领域的头部厂商,都把 Flink 做为实时计算的技术底座,国内有字节跳动、腾讯、华为,国外有 Netflix、Uber 等等。 而业务实时化只是一个终点,Flink 的指标之一就是给用户提供实时离线一体化的用户体验。其实很多用户不仅须要实时的数据统计,为了确认经营或产品的策略的成果,用户同时还须要和历史(昨天,甚至是去年的同期)数据比拟。而从用户的角度来看,原有的流、批独立计划存在一些痛点: 人力老本比拟高。因为流和批是两套零碎,雷同的逻辑须要两个团队开发两遍。数据链路冗余。在很多的场景下,流和批计算内容其实是统一,然而因为是两套零碎,所以雷同逻辑还是须要运行两遍,产生肯定的资源节约。数据口径不统一。这个是用户遇到的最重要的问题。两套零碎、两套算子,两套 UDF,肯定会产生不同水平的误差,这些误差给业务方带来了十分大的困扰。这些误差不是简略依附人力或者资源的投入就能够解决的。 2020 年的双十一,在实时洪峰达到 40 亿的历史新高的同时,Flink 团队与 DT 团队一起推出了基于 Flink 的全链路流批一体的数仓架构,很好解决了 Lambda 的架构所带来的一系列问题:流批作业应用同一 SQL,使研发效率晋升了 3~4 倍;一套引擎确保了数据口径人造统一;流批作业在同一集群运行,削峰填谷大幅晋升了资源效率。 Flink 流批一体的胜利,离不开 Flink 开源社区的衰弱蓬勃发展。从 Apache 软件基金会 2020 年度报告能够看出,在反映开源社区凋敝状况的三个要害指标上 Flink 都名落孙山:用户邮件列表活跃度,Flink 排名第一;开发者提交次数 Flink 排名第二,Github 用户访问量排名第二。这些数据并不局限于大数据畛域,而是 Apache 开源基金会上司的所有我的项目。 2020 年也是 Blink 反哺社区的第二年,这两年咱们把 Blink 在团体内积攒的教训逐渐奉献回社区,让 Flink 成为真正意义上的流批一体平台。我心愿通过这篇文章给大家分享下这两年 Flink 在执行引擎流批交融方面做了哪些工作。同时也心愿 Flink 的老用户和新敌人能够进一步理解 Flink 流批一体架构的“前世今生”。 ...

March 25, 2021 · 5 min · jiezi

关于Flink:字节跳动单点恢复功能及-Regional-CheckPoint-优化实践

作者|廖嘉逸 摘要:本文介绍字节跳动在过来一段时间里做的两个次要的 Feature,一是在 Network 层的单点复原的性能,二是 Checkpoint 层的 Regional Checkpoint。内容包含: 单点复原机制Regional Checkpoint在 Checkpoint 的其它优化挑战 & 将来布局作者分享原版视频回顾:https://www.bilibili.com/vide... 一、单点复原机制在字节跳动的实时举荐场景中,咱们应用 Flink 将用户特色与用户行为进行实时拼接,拼接样本作为实时模型的输出。拼接服务的时延和稳定性间接影响了线上产品对用户的举荐成果,而这种拼接服务在 Flink 中是一个相似双流 Join 的实现,Job 中的任何一个 Task 或节点呈现故障,都会导致整个 Job 产生 Failover,影响对应业务的实时举荐成果。 在介绍单点复原之前,咱们回顾一下 Flink 的 Failover 策略。 Individual-Failover:只重启出错的 Task,实用于 Task 间无连贯的状况,利用场景无限。 Region-Failover:该策略会将作业中的所有 Task 划分为数个 Region。当有 Task 产生故障时,它会尝试找出进行故障复原须要重启的最小 Region 汇合。相比于全局重启故障复原策略,这种策略在一些场景下的故障复原须要重启的 Task 会更少。 如果应用 Region-Failover 策略,但因为 Job 是一个全连贯的拓扑,自身就是一个大 region。重启 region 相当于重启整个 Job,所以咱们思考是否能够用 Flink Individual-task-failover 策略去代替 Region-failover 策略?而 Individual-task-failover 的策略在这种拓扑下是齐全不实用的。所以咱们对于以下特色的场景,须要设计开发一个新的 Failover 策略: 多流 Join 拓扑流量大(30M QPS)、高并发度(16K*16K)容许短时间内小量局部数据失落对数据继续输入型要求高在讲述技术计划之前,看一下 Flink 现有的数据传输机制。 ...

March 22, 2021 · 4 min · jiezi

关于flink:Flink海量数据去重方案

前言数据去重(data deduplication)是咱们大数据攻城狮司空见惯的问题了。除了统计UV等传统用法之外,去重的意义更在于打消不牢靠数据源产生的脏数据——即反复上报数据或反复投递数据的影响,使流式计算产生的后果更加精确。本文以Flink解决日均亿级别及以上的日志数据为背景,探讨除了奢侈办法(HashSet)之外的三种实时去重计划,即:布隆过滤器、RocksDB状态后端、内部存储。 计划一、布隆过滤器去重布隆过滤器在笔者的博客里出镜率是很高的,如果看官尚未理解,请务必先食用这篇文章。 以之前用过的子订单日志模型为例,假如上游数据源产生的音讯为<Integer, Long, String>三元组,三个元素别离代表站点ID、子订单ID和数据载荷。因为数据源只能保障at least once语义(例如未开启correlation ID机制的RabbitMQ队列),会反复投递子订单数据,导致上游各统计后果偏高。现引入Guava的BloomFilter来去重,间接上代码说事。 // dimensionedStream是个DataStream<Tuple3<Integer, Long, String>> DataStream<String> dedupStream = dimensionedStream .keyBy(0) .process(new SubOrderDeduplicateProcessFunc(), TypeInformation.of(String.class)) .name("process_sub_order_dedup").uid("process_sub_order_dedup"); // 去重用的ProcessFunction public static final class SubOrderDeduplicateProcessFunc extends KeyedProcessFunction<Tuple, Tuple3<Integer, Long, String>, String> { private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory.getLogger(SubOrderDeduplicateProcessFunc.class); private static final int BF_CARDINAL_THRESHOLD = 1000000; private static final double BF_FALSE_POSITIVE_RATE = 0.01; private volatile BloomFilter<Long> subOrderFilter; @Override public void open(Configuration parameters) throws Exception { long s = System.currentTimeMillis(); subOrderFilter = BloomFilter.create(Funnels.longFunnel(), BF_CARDINAL_THRESHOLD, BF_FALSE_POSITIVE_RATE); long e = System.currentTimeMillis(); LOGGER.info("Created Guava BloomFilter, time cost: " + (e - s)); } @Override public void processElement(Tuple3<Integer, Long, String> value, Context ctx, Collector<String> out) throws Exception { long subOrderId = value.f1; if (!subOrderFilter.mightContain(subOrderId)) { subOrderFilter.put(subOrderId); out.collect(value.f2); } ctx.timerService().registerProcessingTimeTimer(UnixTimeUtil.tomorrowZeroTimestampMs(System.currentTimeMillis(), 8) + 1); } @Override public void onTimer(long timestamp, OnTimerContext ctx, Collector<String> out) throws Exception { long s = System.currentTimeMillis(); subOrderFilter = BloomFilter.create(Funnels.longFunnel(), BF_CARDINAL_THRESHOLD, BF_FALSE_POSITIVE_RATE); long e = System.currentTimeMillis(); LOGGER.info("Timer triggered & resetted Guava BloomFilter, time cost: " + (e - s)); } @Override public void close() throws Exception { subOrderFilter = null; } } // 依据以后工夫戳获取第二天0时0分0秒的工夫戳 public static long tomorrowZeroTimestampMs(long now, int timeZone) { return now - (now + timeZone * 3600000) % 86400000 + 86400000; } 这里先依照站点ID为key分组,而后在每个分组内创立存储子订单ID的布隆过滤器。布隆过滤器的冀望最大数据量应该按每天产生子订单最多的那个站点来设置,这里设为100万,并且可容忍的误判率为1%。依据下面科普文中的解说,单个布隆过滤器须要8个哈希函数,其位图占用内存约114MB,压力不大。 ...

March 15, 2021 · 2 min · jiezi

关于flink:网易游戏基于-Flink-的流式-ETL-建设

网易游戏资深开发工程师林小铂为大家带来网易游戏基于 Flink 的流式 ETL 建设的介绍。内容包含: 业务背景专用 ETLEntryX 通用 ETL调优实际将来布局一. 业务背景网易游戏 ETL 服务详情网易游戏的根底数据次要日志形式采集,这些日志通常是非结构化或半结构化数据,须要通过数据集成 ETL 才能够入库至实时或离线的数据仓库。尔后,业务用户才能够不便地用 SQL 实现大部分数据计算,包含实时的 Flink SQL 和离线的 Hive 或 Spark。 网易游戏数据集成的数据流与大多数公司大同小异,次要有游戏客户端日志、游戏服务端日志和其余周边根底的日志,比方 Nginx access log、数据库日志等等。这些日志会被采集到对立的 Kafka 数据管道,而后经由 ETL 入库服务写入到 Hive 离线数据仓库或者 Kafka 实时数据仓库。 这是很常见的架构,但在咱们在需要方面是有一些比拟非凡的状况。 网易游戏流式 ETL 需要特点 首先,不同于互联网、金融等行业根本罕用 MySQL、Postgres 等的关系型数据库,游戏行业经常应用 MongoDB 这类 schema-free 的文档型数据库。这给咱们 ETL 服务带来的问题是并没有一个线上业务的精确的 schema 能够依赖,在理论数据处理中,多字段或少字段,甚至一个字段因为玩法迭代变更为齐全不同的格局,这样的状况都是可能产生的。这样的数据异构问题给咱们 ETL 的数据荡涤带来了比拟高的老本。 其次,也是因为数据库选型的起因,大部分业务的数据库模式都遵循了反范式设计,会刻意以简单内嵌的字段来防止表间的 join。这种状况给咱们带来的一个益处是,在数据集成阶段咱们不须要去实时地去 join 多个数据流,害处则是数据结构可能会非常复杂,多层嵌套非常常见。 而后,因为近年来实时数仓的风行,咱们也同样在逐渐建设实时数据仓库,所以复用现有的 ETL 管道,提取转换一次,加载到实时离线两个数据仓库,成为一个很天然的倒退方向。 最初,咱们的日志类型多且变更频繁,比方一个玩法简单的游戏,可能有 1,000 个以上的日志类型,每两周可能就会有一次发版。在这样的背景下 ETL 出现异常数据是不可避免的。因而咱们须要提供欠缺的异样解决,让业务能够及时得悉数据异样和通过流程修复数据。 日志分类及特点 为了更好地针对不同业务应用模式优化,咱们对不同日志类型的业务提供了不同的服务。咱们的日志通常分为三个类型:经营日志、业务日志和程序日志。 经营日志记录的是玩家行为事件,比方登录帐号、支付礼包等。这类日志是最为重要日志,有固定的格局,也就是特定 header + json 的文本格式。数据的主要用途是做数据报表、数据分析还有游戏内的举荐,比方玩家的组队匹配举荐。 ...

March 12, 2021 · 4 min · jiezi

关于flink:Flink-SQL-CDC-实践以及一致性分析

本文由民生银行王健、文乔分享,次要介绍民生银行 Flink SQL CDC 实际以及一致性剖析。内容包含: 背景什么是 Flink SQL CDC ConnectorsFlink SQL CDC 原理介绍三种数据同步计划Flink SQL CDC + JDBC Connector 同步计划验证Flink SQL CDC + JDBC Connector 端到端一致性剖析Flink SQL CDC 目前存在的缺点一. 背景数据准实时复制(CDC)是目前行内实时数据需要大量应用的技术,随着国产化的需要,咱们也逐渐思考基于开源产品进行准实时数据同步工具的相干开发,逐渐实现对商业产品的代替。咱们评估了几种开源产品,Canal、Debezium、Flink CDC 等产品。作了如下的比照: 二.什么是 Flink SQL CDC Connectors在 Flink 1.11 引入了 CDC 机制,CDC 的全称是 Change Data Capture,用于捕获数据库表的增删改查操作,是目前十分成熟的同步数据库变更计划。 Flink CDC Connectors 是 Apache Flink 的一组源连接器,是能够从 MySQL、PostgreSQL 数据间接读取全量数据和增量数据的 Source Connectors,开源地址:https://github.com/ververica/...。 目前(1.11版本)反对的 Connectors 如下: 另外反对解析 Kafka 中 debezium-json 和 canal-json 格局的 Change Log,通过Flink 进行计算或者间接写入到其余内部数据存储系统(比方 Elasticsearch),或者将 Changelog Json 格局的 Flink 数据写入到 Kafka: ...

March 11, 2021 · 6 min · jiezi

关于Flink:使用-Flink-前需要知道的-10-个『陷阱』

作者 | Robin翻译 | 周凯波 Contentsquare 公司的 Robin 总结了他们将 Spark 工作迁徙到 Flink 遇到的 10 个『陷阱』。对于第一次将 Flink 用于生产环境的用户来说,这些教训十分有参考意义。采纳新的框架总是会带来很多惊喜。当你花了几天工夫去排查为什么服务运行异样,后果发现只是因为某个性能的用法不对或者短少一些简略的配置。 在 Contentsquare[1],咱们须要一直降级数据处理工作,以满足越来越多的数据上的刻薄需要。这也是为什么咱们决定将用于会话[2]解决的小时级 Spark 工作迁徙到 Flink[3] 流服务。这样咱们就能够利用 Flink 更为强壮的解决能力,提供更实时的数据给用户,并能提供历史数据。不过这并不轻松,咱们的团队在下面工作了有一年工夫。同时,咱们也遇到了一些令人诧异的问题,本文将尝试帮忙你防止这些陷阱。 1. 并行度设置导致的负载歪斜咱们从一个简略的问题开始:在 Flink UI 中考察某个作业的子工作时,对于每个子工作解决的数据量,你可能会遇到如下这种奇怪的状况。 每个子工作的工作负载并不平衡 这表明每个子工作的算子没有收到雷同数量的 Key Groups,它代表所有可能的 key 的一部分。如果一个算子收到了 1 个 Key Group,而另外一个算子收到了 2 个,则第二个子工作很可能须要实现两倍的工作。查看 Flink 的代码,咱们能够找到以下函数: public static int computeOperatorIndexForKeyGroup( int maxParallelism, int parallelism, int keyGroupId) { return keyGroupId * parallelism / maxParallelism; }其目标是将所有 Key Groups 分发给理论的算子。Key Groups 的总数由 maxParallelism 参数决定,而算子的数量和 parallelism 雷同。这里最大的问题是 maxParallelism 的默认值,它默认等于 operatorParallelism + (operatorParallelism / 2) [4]。如果咱们设置 parallelism 为10,那么 maxParallelism 为 15 (理论最大并发度值的上限是 128 ,下限是 32768,这里只是为了不便举例)。这样,依据下面的函数,咱们能够计算出哪些算子会调配给哪些 Key Group。 ...

March 11, 2021 · 3 min · jiezi

关于Flink:迄今为止最好用的Flink-SQL教程Flink-SQL-Cookbook-on-Zeppelin

对于初学者来说,学习 Flink 可能不是一件容易的事件。看文档是一种学习,更重要的是实际起来。但对于一个初学者来说要把一个 Flink SQL 跑起来还真不容易,要搭各种环境,真心累。很侥幸的是,Flink 生态圈里有这样一款工具能够帮忙你更有效率地学习 Flink:Zeppelin。本文不讲 Flink on Zeppelin 相干的内容,更关注于如何用 Zeppelin 来学习 Flink。 给大家介绍一个可能是迄今为止用户体验最好的 Flink SQL 教程:Flink Sql Cookbook on Zeppelin。你无需写任何代码,只有照着这篇文章轻松几步就能跑各种类型的 Flink SQL 语句。废话不多说,咱们开始吧。 这个教程其实就是 ververica 的 flink-sql-cookbook (https://github.com/ververica/... )的改进版。这里所有的例子你都能够在 Zeppelin 里跑起来,而且不必写任何代码。我曾经把外面的例子都移植到了 Zeppelin。 筹备环境Step 1git clone https://github.com/zjffdu/flink-sql-cookbook-on-zeppelin.git这个 repo 里是一些 Zeppelin notebook,外面都是 flink-sql-cookbook 里的例子。 Step 2下载 Flink 1.12.1 (我没有试过其余版本的 Flink,有趣味的同学能够试下),并解压。 Step 3编译 Flink faker,地址:https://github.com/knaufk/fli...。 把编译进去的 flink-faker-0.2.0.jar 拷贝到 Flink 的 lib 目录下。这个 Flink faker 是一个特制的 table source,用来生成测试数据。咱们的很多例子里都会用到这个 Flink faker。 ...

March 4, 2021 · 1 min · jiezi

关于Flink:Flink-手写ATLEASTONCE语义的Source

Flink 手写AT_LEAST_ONCE语义的Source需要老王交给个工作,心愿我用Flink实现一个简略的数据ETL。 须要实时拉取数据,保证数据不丢。我想了想整顿这篇文章。仅供提供思路,并把相干常识串起来。 Flink自身提供了CDC性能更加弱小不便。尽管如此,然而我想通过 SourceFunction 实现Mysql实时数据拉取。简略思路: 为了保障起码一次读取数据(数据不丢),应用状态存储查问到最新截止工夫。这里须要自定义实现数据库连贯。应用官网jdbc-sink写入mysql 应用到知识点自定义 SourceFunction状态 Operator State (_non-keyed state_)检查点 CheckPoint状态后端 StateBackend数据库写入 Mysql Sink1. 自定义 SourceFunctionFlink 对数据的产生通过提供了对立的接口,不便用户应用。 首先看一张类继承依赖图: 咱们只须要重点关注上面3个类就好,首先看下他们的接口定义: SourceFunction: Flink中所有流数据源的根本接口RichSourceFunction : 用于实现能够拜访上下文信息的数据源的基类RichParallelSourceFunction:用于实现并行数据源的基类1.1 SourceFunction接口再来看看SourceFunction接口的罕用办法: @Publicpublic interface SourceFunction<T> extends Function, Serializable { /** * 启动该数据源发送元素 */ void run(SourceContext<T> ctx) throws Exception; /** * 勾销这个源的数据发送 */ void cancel();}SourceFunction实现例子: /** * 不带上下文 不反对并发 */public class E02CustomizeSource implements SourceFunction<OrderInfo> { //运行标记位 private volatile boolean isRunning = true; @Override public void run(SourceContext<OrderInfo> ctx) throws Exception { while (isRunning) { OrderInfo orderInfo = new OrderInfo(); orderInfo.setOrderNo(System.currentTimeMillis() + "" + new Random().nextInt(10)); orderInfo.setItemId(1000); orderInfo.setItemName("iphone 12pro max"); orderInfo.setPrice(9800D); orderInfo.setQty(1); ctx.collect(orderInfo); Thread.sleep(new Random().nextInt(10) * 1000); } } @Override public void cancel() { isRunning = false; }}从例子能够看出 run 办法中只有 isRunning!=false 就能够始终运行下 , cancel 能够批改这个标记位, ...

March 3, 2021 · 6 min · jiezi

关于Flink:快手基于-Flink-的持续优化与实践

本文由快手实时计算负责人董亭亭分享,次要介绍快手基于 Flink 的继续优化与实际的介绍。内容包含: Flink 稳定性继续优化Flink 工作启动优化Flink SQL 实际与优化将来的工作一、Flink 稳定性继续优化第一局部是 Flink 稳定性的继续优化。该局部包含两个方面,第一个方面,次要介绍快手在 Flink Kafka Connector 方面做的一些高可用,是基于外部的双机房读或双机房写和一些容错的策略。第二局部对于 Flink 工作的故障复原。咱们在减速故障复原方面做了一些优化工作。 首先,介绍 Source 方面的高可用。在公司外部比拟重要的数据写 Kafka 时,Kafka 层面为保障高可用个别都会创立双集群的 topic。双集群的 topic 独特承当全副流量,如果单集群产生故障,上游主动分流。Kafka 层面通过这种形式做到双集群的高可用。然而 Flink 工作在生产双集群 topic 时,自身是不能做到高可用的。Flink 工作通过两个 Source union 形式生产,Source 别离感知上游 topic 故障,单集群故障需手动将故障 Source 摘除。这种形式的毛病是故障时须要人工的干涉,必须手动去批改代码的逻辑,程序外部自身是不能做到高可用的。这是做双机房读的背景。 为了解决上述问题,咱们封装了一个 Kafka 的 Cluster Source,它在 API 上反对读取双集群的 topic。同时做到,能够容忍单集群故障,集群故障复原时也能够主动将故障集群重新加入。 接下来是对于 Sink 方面的高可用。Flink 写双集群 Kafka topic,会定义不同集群 Sink,逻辑内管制拆流。这种形式灵活性差,且不能容忍单机房故障。如果单集群产生故障,仍须要手动摘除对应的 Sink。 同样,针对 sink 咱们也定制了一个 Cluster Sink,它 API 上反对写双集群 topic。具体写的策略,能够反对轮询和主从写的形式。如果单集群产生故障,逻辑内会主动将流量切到失常集群 topic。如果单集群故障复原之后,也能感知到集群的复原,能够主动的再把相应集群复原回来。 ...

March 3, 2021 · 2 min · jiezi

关于Flink:流批一体生产应用Bigo-实时计算平台建设实践

本文由 Bigo 计算平台负责人徐帅分享,次要介绍 Bigo 实时计算平台建设实际的介绍。内容包含: Bigo 实时计算平台的倒退历程特色与改良业务场景效率晋升总结瞻望一、Bigo 实时计算平台的倒退历程明天次要跟大家分享 Bigo 实时计算平台的建设历程,咱们在建设过程中解决的一些问题,以及所做的一些优化和改良。首先进入第一个局部,Bigo 实时计算平台的倒退历程。 先简略介绍一下 Bigo 的业务。它次要有三大 APP,别离是 Live, Likee 和 Imo。其中,Live 为寰球用户提供直播服务。Likee 是短视频的创作与分享的 App,跟快手和抖音都十分类似。Imo 是一个寰球收费的通信工具。这几个次要的产品都是跟用户相干的,所以咱们的业务要围绕着如何进步用户的转化率和留存率。而实时计算平台作为根底的平台,次要是为以上业务服务的,Bigo 平台的建设也要围绕上述业务场景做一些端到端的解决方案。 Bigo 实时计算的倒退历程大略分为三个阶段。 在 2018 年之前,实时作业还非常少,咱们应用 Spark Streaming 来做一些实时的业务场景。从 18 年到 19 年,随着 Flink 的衰亡,大家普遍认为 Flink 是最好的实时计算引擎,咱们开始应用 Flink,离散倒退。各个业务线本人搭一个 Flink 来简略应用。从 2019 年开始,咱们把所有应用 Flink 的业务对立到 Bigo 实时计算平台上。通过两年的建设,目前所有实时计算的场景都运行在 Bigo 平台上。 如下图所示,这是 Bigo 实时计算平台的现状。在 Data Source 端,咱们的数据都是用户的行为日志,次要来自于 APP 和客户端。还有一部分用户的信息存在 MySQL 中。 这些信息都会通过音讯队列,最终采集到咱们的平台里。音讯队列次要用的是 Kafka,当初也在逐步的采纳 Pulsar。而 MySQL 的日志次要是通过 BDP 进入实时计算平台。在实时计算平台这块,底层也是基于比拟罕用的 Hadoop 生态圈来做动静资源的治理。在下面的引擎层,曾经对立到 Flink,咱们在下面做一些本人的开发与优化。在这种一站式的开发、运维与监控的平台上,咱们外部做了一个 BigoFlow 的治理平台。用户能够在 BigoFlow 上开发、调试和监控。最终在数据存储上,咱们也是对接了 Hive、ClickHouse、HBase 等等。 ...

February 24, 2021 · 2 min · jiezi

关于flink:有赞-Flink-实时任务资源优化探索与实践

作者|沈磊 随着 Flink K8s 化以及实时集群迁徙实现,有赞越来越多的 Flink 实时工作运行在 K8s 集群上,Flink K8s 化晋升了实时集群在大促时弹性扩缩容能力,更好的升高大促期间机器扩缩容的老本。同时,因为 K8s 在公司外部有专门的团队进行保护, Flink K8s 化也可能更好的减低公司的运维老本。 不过以后 Flink K8s 工作资源是用户在实时平台端进行配置,用户自身对于实时工作具体配置多少资源教训较少,所以存在用户资源配置较多,但理论应用不到的情景。比方一个 Flink 工作实际上 4 个并发可能满足业务解决需要,后果用户配置了 16 个并发,这种状况会导致实时计算资源的节约,从而对于实时集群资源水位以及底层机器老本,都有肯定影响。基于这样的背景,本文从 Flink 工作内存以及音讯能力解决方面,对 Flink 工作资源优化进行摸索与实际。 一、Flink 计算资源类型与优化思路1.1 Flink 计算资源类型一个 Flink 工作的运行,所须要的资源我认为可能分为 5 类: 内存资源本地磁盘(或云盘)存储依赖的内部存储资源。比方 HDFS、S3 等(工作状态/数据),HBase、MySQL、Redis 等(数据)CPU 资源网卡资源 目前 Flink 工作应用最次要的还是内存和 CPU 资源,本地磁盘、依赖的内部存储资源以及网卡资源个别都不会是瓶颈,所以本文咱们是从 Flink 工作的内存和 CPU 资源,两个方面来对 Flink 实时工作资源进行优化。 1.2 Flink 实时工作资源优化思路对于 Flink 实时工作资源剖析思路,咱们认为次要蕴含两点: 一是从工作内存视角,从堆内存方面对实时工作进行剖析。另一方面则是从实时工作音讯解决能力动手,保障满足业务方数据处理需要的同时,尽可能正当应用 CPU 资源。之后再联合实时工作内存剖析所得相干指标、实时工作并发度的合理性,得出一个实时工作资源预设值,在和业务方充沛沟通后,调整实时工作资源,最终达到实时工作资源配置合理化的目标,从而更好的升高机器应用老本。 ■ 1.2.1 工作内存视角那么如何剖析 Flink 工作的堆内存呢?这里咱们是联合 Flink 工作 GC 日志来进行剖析。GC 日志蕴含了每次 GC 堆内不同区域内存的变动和应用状况。同时依据 GC 日志,也可能获取到一个 Taskmanager 每次 Full GC 后,老年代残余空间大小。能够说,获取实时工作的 GC 日志,使咱们进行实时工作内存剖析的前提。 ...

February 24, 2021 · 4 min · jiezi

关于flink:Flink-SQL-性能优化multiple-input-详解

作者|贺小令、翁才智 执行效率的优化始终是 Flink 追寻的指标。在大多数作业,特地是批作业中,数据通过网络在 task 之间传递(称为数据 shuffle)的代价较大。失常状况下一条数据通过网络须要通过序列化、磁盘读写、socket 读写与反序列化等艰难险阻,能力从上游 task 传输到上游;而雷同数据在内存中的传输,仅须要消耗几个 CPU 周期传输一个八字节指针即可。 Flink 在晚期版本中曾经通过 operator chaining 机制,将并发雷同的相邻单输出算子整合进同一个 task 中,打消了单输出算子之间不必要的网络传输。然而,join 等多输出算子之间同样存在额定的数据 shuffle 问题,shuffle 数据量最大的 source 节点与多输出算子之间的数据传输也无奈利用 operator chaining 机制进行优化。 在 Flink 1.12 中,咱们针对目前 operator chaining 无奈笼罩的场景,推出了 multiple input operator 与 source chaining 优化。该优化将打消 Flink 作业中大多数冗余 shuffle,进一步提高作业的执行效率。本文将以一个 SQL 作业为例介绍上述优化,并展现 Flink 1.12 在 TPC-DS 测试集上获得的成绩。 优化案例解析:订单量统计咱们将以 TPC-DS q96 为例子具体介绍如何打消冗余 shuffle,该 SQL 意在通过多路 join 筛选并统计合乎特定条件的订单量。 select count(*) from store_sales ,household_demographics ,time_dim, storewhere ss_sold_time_sk = time_dim.t_time_sk and ss_hdemo_sk = household_demographics.hd_demo_sk and ss_store_sk = s_store_sk and time_dim.t_hour = 8 and time_dim.t_minute >= 30 and household_demographics.hd_dep_count = 5 and store.s_store_name = 'ese'图 1 - 初始执行打算 ...

February 22, 2021 · 3 min · jiezi

关于flink:Apache-Flink-在快手的过去现在和未来

本文由快手大数据架构团队负责人赵健博分享,次要介绍 Apache Flink 在快手的过来、当初和将来。内容包含: 为什么选 FlinkFlink 在快手的倒退业务数据流技术创新将来打算一、为什么选 Flink大家好,我是赵健博,来自快手,目前负责快手大数据架构团队。明天很快乐能够和大家分享咱们在 Flink 我的项目上的利用、改良与倒退历程。 先来看一下咱们抉择 Flink 引擎的次要起因: 首先,Flink 能做到亚秒级解决提早。目前大部分的业务需要对实时处理提早要求越来越高,这是个最根本需要。其次,Flink 有丰盛的窗口计算模式,且自带状态存储引擎以及精准一次的语义,这个能力极大简化了数据的解决复杂度,显著晋升了研发的速度。最初,批流一体能力以及研发模式的改革,也将进一步提效研发,为业务赋能。本次会议也看到了很多公司都在分享批流一体落地实际,置信流批一体全场景落地的大过程也将不可企及。 二、Flink 在快手的倒退Flink 在快手的倒退历程,总的来说能够分为四个阶段: 咱们是从 17 年开始应用 Flink 的,17 年咱们次要是初步试用,过后接入的业务是直播与短视频的品质监控业务。进入到 2018 年之后,在能力上,咱们开始对 Flink 进行成周边体系的建设,例如,构建引擎外部 metric 的采集,监控与报警流程、作业托管平台上线等。与此同时,咱们也在一直的加深对 Flink 的了解,修炼内功;在业务上,开始接入直播 CDN 流量调度,日志实时拆分、投放剖析、客户端 Crash 剖析等场景。进入到 2019 年后,随着对 Flink 引擎掌控力的增强,咱们开始进行一些稳定性与性能相干的改良,次要包含防雪崩,流控、分级保障、参数热更新、自研状态存储引擎 Slimbase、实时多维建模等。在业务上,开始撑持春节流动大屏、实时多维分析、曝光/点击流实时 Join 等场景。到 2020 年后,咱们除了继续关注稳定性性能之外,也在推动效率改良,例如调研并开始试用 Flink SQL,以及流批一体能力。在业务上,采纳 Flink SQL 撑持流动大屏、开始通过 Flink 以及流批一体能力建设 AI 数据流、实时报表、直播精彩时刻等业务场景。 截止到目前,快手 Flink 从业务规模上看有若干集群,集群有数千机器,目前还是部署在 YARN 上,后续也会思考迁徙到 K8s 上。总的作业 2000 左右,这些作业每天解决 20 多万亿条的记录,其中峰值达到每秒 6 亿条的规模。 ...

February 5, 2021 · 3 min · jiezi

关于flink:深度集成-Flink-Apache-Iceberg-0110-最新功能解读

在 2021 年 1 月 27 日,Apache Iceberg 公布了 0.11.0 版本[1]。在这个版本中,实现了以下外围性能: 1、Apache Iceberg 在 Core API 层面反对了 partition 的变更;同时还在 Iceberg Format v2 之上新增了 SortOrder 标准,次要用于将那些散列度较高的 column 汇集在少数几个文件内,这样能够大量缩小小文件的数量。同时进步读取的效率,因为数据通过 sort 写入后,文件级别和 Page 级别的 min-max 范畴将更小,有助于高效的数据过滤。 2、在 Flink 和 Iceberg 的集成方面,社区实现了以下指标: 实现了 Flink Streaming Reader,意味着咱们能够通过 Flink 流作业增量地去拉取 Apache Iceberg 中新增数据。对 Apache Iceberg 这样流批对立的存储层来说,Apache Flink 是真正意义上第一个实现了流批读写 Iceberg 的计算引擎,这也标记着 Apache Flink 和 Apache Iceberg 在独特打造流批对立的数据湖架构上开启了新的篇章。实现了 Flink Streaming/Batch Reader 的 limit pushdown 和 filter pushdown。实现了 CDC 和 Upsert 事件通过 flink 计算引擎写入 Apache Iceberg,并在中等数据规模上实现了正确性验证。在 Flink Iceberg Sink 中反对 write.distribution-mode=hash 的形式写入数据,这能够从生产源头上大量缩小小文件。3、在 Spark3 和 Iceberg 的集成方面,社区反对了大量高阶 SQL: ...

February 5, 2021 · 4 min · jiezi

关于flink:腾讯基于-Flink-SQL-的功能扩展与深度优化实践

整顿:戴季国(Flink 社区志愿者) 校对:苗文婷(Flink 社区志愿者) 摘要:本文由腾讯高级工程师杜立分享,次要介绍腾讯实时计算平台针对 Flink SQL 所做的优化,内容包含: Flink SQL 现状窗口性能的扩大回撤流的优化将来的布局一、背景及现状1. 三种模式的剖析 Flink 作业目前有三种创立形式:JAR 模式、画布模式和 SQL 模式。不同的提交作业的形式针对的人群也是不一样的。 ■ Jar 模式Jar 模式基于 DataStream/DataSet API 开发,次要针对的是底层的开发人员。 长处:· 性能灵便多变,因为它底层的 DataStream/DataSet API 是 Flink 的原生 API,你能够用它们开发任何你想要的算子性能或者 DAG 图;· 性能优化不便,能够十分有针对性的去优化每一个算子的性能。 毛病:· 依赖更新繁琐,无论扩大作业逻辑或是 Flink 版本的降级,都要去更新作业的代码以及依赖版本;· 学习门槛较高。 ■ 画布模式所谓的画布模式,一般来讲会提供一个可视化的利落拽界面,让用户通过界面化的形式去进行利落拽操作,以实现 Flink 作业的编辑。它面向一些小白用户。 长处:· 操作便捷,画布上能够很不便地定义 Flink 的作业所蕴含的各种算子;· 性能较全,它基于 Table API 开发,性能笼罩比拟残缺;· 易于了解,DAG 图比拟直观,用户可能非常容易的去了解整个作业的运行流程。 毛病:· 配置简单:每一个算子都须要去一一的去配置,如果整个 DAG 图非常复杂,相应的配置工作也会十分大;· 逻辑重用艰难:如果作业十分的多,不同的作业之间想去共享 DAG 逻辑的话十分艰难。 ■ SQL 模式SQL 语言曾经存在了很长时间了,它有本人的一套规范,次要面向数据分析人员。只有遵循既有的 SQL 规范,数据分析人员就能够在不同的平台和计算引擎之间进行切换。 长处:· 清晰简洁,易于了解和浏览;· 与计算引擎解耦,SQL 与计算引擎及其版本是解耦的,在不同的计算引擎之间迁徙业务逻辑不须要或极少须要去更改整段 SQL。同时,如果想降级 Flink 版本,也是不须要去更改 SQL;· 逻辑重用不便,能够通过 create view 的形式去重用咱们的 SQL 逻辑。 ...

February 3, 2021 · 4 min · jiezi

关于flink:Flink实战订单支付和对账情况监控分别使用CEP和ProcessFunction来实现

在电商网站中,订单的领取作为间接与钱挂钩的一环,在业务流程中十分重要。对于订单而言,为了正确管制业务流程,也为了减少用户的领取志愿,网站个别会设置一个领取生效工夫,超过一段时间没领取的订单就会被勾销。另外,对于订单的领取,还应该保障最终领取的正确性,能够通过第三方领取平台的交易数据来做一个实时对账 第一个实现的成果,实时获取订单数据,剖析订单的领取状况,别离实时统计领取胜利的和15分钟后领取超时的状况 新建一个maven我的项目,这是根底依赖,如果之前引入了,就不必加了 <properties> <maven.compiler.source>`8`</maven.compiler.source> <maven.compiler.target>`8`</maven.compiler.target> <flink.version>`1.10.1`</flink.version> <scala.binary.version>`2.12`</scala.binary.version> <kafka.version>`2.2.0`</kafka.version> </properties> <dependencies> <dependency> <groupId>`org.apache.flink`</groupId> <artifactId>`flink-scala_${scala.binary.version}`</artifactId> <version>`${flink.version}`</version> </dependency> <dependency> <groupId>`org.apache.flink`</groupId> <artifactId>`flink-streaming-scala_${scala.binary.version}`</artifactId> <version>`${flink.version}`</version> </dependency> <dependency> <groupId>`org.apache.kafka`</groupId> <artifactId>`kafka_${scala.binary.version}`</artifactId> <version>`${kafka.version}`</version> </dependency> <dependency> <groupId>`org.apache.flink`</groupId> <artifactId>`flink-connector-kafka_${scala.binary.version}`</artifactId> <version>`${flink.version}`</version> </dependency> <dependency> <groupId>`cn.hutool`</groupId> <artifactId>`hutool-all`</artifactId> <version>`5.5.6`</version> </dependency> <dependency> <groupId>`org.apache.flink`</groupId> <artifactId>`flink-table-planner-blink_2.12`</artifactId> <version>`1.10.1`</version> </dependency> </dependencies>这个场景须要用到cep,所以再退出cep依赖 <dependencies> <dependency> <groupId>`org.apache.flink`</groupId> <artifactId>`flink-cep-scala_${scala.binary.version}`</artifactId> <version>`${flink.version}`</version> </dependency> </dependencies>筹备数据源文件src/main/resources/OrderLog.csv: `1234,`**create**`,,`16110476051235,create,,1611047606 1236,create,,1611047606 1234,pay,akdb3833,1611047616 把java目录改为scala,新建com.mafei.orderPayMonitor.OrderTimeoutMonitor.scala 的object /* * * @author mafei * @date 2021/1/31 */ package com.mafei.orderPayMonitorimport org.apache.flink.cep.{PatternSelectFunction, PatternTimeoutFunction}import org.apache.flink.cep.scala.CEPimport org.apache.flink.cep.scala.pattern.Patternimport org.apache.flink.streaming.api.TimeCharacteristicimport org.apache.flink.streaming.api.scala.{OutputTag, StreamExecutionEnvironment, createTypeInformation}import org.apache.flink.streaming.api.windowing.time.Timeimport java.util/** ...

February 2, 2021 · 4 min · jiezi