阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Apache Flink和Kafka进行大数据流处理

433次阅读
没有评论

共计 3148 个字符,预计需要花费 8 分钟才能阅读完成。

Flink 是一个开源流处理框架,注意它是一个处理计算框架,类似 Spark 框架,Flink 在数据摄取方面非常准确,在保持状态的同时能轻松地从故障中恢复。

Flink 内置引擎是一个分布式流数据流引擎,支持 流处理和批处理,支持和使用现有存储和部署基础架构的能力,它支持多个特定于域的库,如用于机器学习的 FLinkML、用于图形分析的 Gelly、用于复杂事件处理的 SQL 和 FlinkCEP。Flink 的另一个有趣的方面是现有的大数据作业(Hadoop M / R,Cascading,Storm)可以 通过适配器在 Flink 的引擎上执行,因此这种灵活性使 Flink 成为 Streaming 基础设施处理的中心。

它支持所有下面 关键功能:

处理引擎,支持实时 Streaming 和批处理 Batch
支持各种窗口范例
支持有状态流
Faul Tolerant 和高吞吐量
复杂事件处理(CEP)
背压处理
与现有 Hadoop 堆栈轻松集成
用于进行机器学习和图形处理的库。
核心 API 功能:

每个 Flink 程序都对分布式数据集合执行转换。提供了用于转换数据的各种功能,包括过滤,映射,加入,分组和聚合。
Flink 中的接收 器 操作用于接受触发流的执行以产生所需的程序结果,例如将结果保存到文件系统或将其打印到标准输出
Flink 转换是惰性的,这意味着它们在调用接收 器 操作之前不会执行
Apache Flink API 支持两种操作模式 – 批量操作和实时操作。如果正在处理可以批处理模式处理的有限数据源,则将使用 DataSet API。如果您想要实时处理无限数据流,您需要使用 DataStream API
擅长批处理的现有 Hadoop 堆栈已经有 很多组件,但是试图将其配置为流处理是一项艰巨的任务,因为各种组件如 Oozi(作业调度程序),HDFS(和用于数据加载的存储),ML 和图形库和批处理工作都必须完美协调。最重要的是,Hadoop 具有较差的 Stream 支持,并且没有简单的方法来处理背压峰值。这使得流数据处理中的 Hadoop 堆栈更难以使用。让我们来看看 Flink 架构的高级视图:
使用 Apache Flink 和 Kafka 进行大数据流处理

对于每个提交的程序,创建一个客户端,该客户端执行所需的预处理并将程序转换为并行数据流形式,然后由 TaskManagers 和 JobManager 执行。JobManager 是整个执行周期的主要协调者,负责将任务分配给 TaskManager 以及资源管理。

它的组件图如下:
使用 Apache Flink 和 Kafka 进行大数据流处理

Flink 支持的流的两个重要方面是窗口化和有状态流。窗口化基本上是在流上执行聚合的技术。窗口可以大致分为

翻滚的窗户(没有重叠)
滑动窗(带重叠)
支持基本过滤或简单转换的流处理不需要状态流,但是当涉及到诸如流上的聚合(窗口化)、复杂转换、复杂事件处理等更高级的概念时,则必须支持 有状态流。

使用 Kafka 和 Flink 的 Streaming 架构如下

使用 Apache Flink 和 Kafka 进行大数据流处理

以下是各个流处理框架和 Kafka 结合的基准测试,来自 Yahoo:

使用 Apache Flink 和 Kafka 进行大数据流处理
该架构由中 Kafka 集群是为流处理器提供数据,流变换后的结果在 Redis 中发布,可用于架构之外的应用程序。正如你所看到的,即使在高吞吐量的情况下,Storm 和 Flink 还能保持低延迟,而 Spark 要差多了。继续增加数据量 Flink 不仅跑赢了 Storm,而且还以大约 300 万次 / 秒的速度使 Kafka 链接饱和。

案例源码
Flink 程序的入口点是 ExecutionEnvironment 类的实例 - 它定义了执行程序的上下文。

让我们创建一个 ExecutionEnvironment 来开始我们的处理:

ExecutionEnvironment env
= ExecutionEnvironment.getExecutionEnvironment();
请注意,在本地计算机上启动应用程序时,它将在本地 JVM 上执行处理。如果要在一组计算机上开始处理,则需要在这些计算机上安装 Apache Flink 并相应地配置 ExecutionEnvironment。

我们将创建两个作业:

生产者 WriteToKafka:生成随机字符串并使用 Kafka Flink Connector 及其 Producer API 将它们发布到 MapR Streams 主题。
消费者 ReadFromKafka:读取相同主题并使用 Kafka Flink Connector 及其 Consumer 消息在标准输出中打印消息。
下面是 Kafka 的生产者代码,使用 SimpleStringGenerator()类生成消息并将字符串发送到 kafka 的 flink-demo 主题。

public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties properties = new Properties();
properties.setProperty(“bootstrap.servers”,“localhost:9092″);

DataStream<String> stream = env.addSource(new SimpleStringGenerator());
stream.addSink(new FlinkKafkaProducer09<>(“flink-demo”, new SimpleStringSchema(), properties));

env.execute();
}
创建一个新 StreamExecutionEnvironment 对象,这是使用 Flink 应用程序的起点
DataStream 在应用程序环境中创建一个新的 SimpleStringGenerator,该类实现 SourceFunction Flink 中所有流数据源的基本接口。
将 FlinkKafkaProducer09 添加到主题中。
消费者只需从 flink-demo 主题中读取消息,然后将其打印到控制台中。

public static void main(String[] args) throws Exception {
// create execution environment
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties properties = new Properties();
properties.setProperty(“bootstrap.servers”,“localhost:9092″);
properties.setProperty(“group.id”, “flink_consumer”);

DataStream<String> stream = env.addSource(new FlinkKafkaConsumer09<>(
“flink-demo”, new SimpleStringSchema(), properties) );

stream.map(new MapFunction<String, String>() {
private static final long serialVersionUID = -6867736771747690202L;

  @Override
  public String map(String value) throws Exception {
    return “Stream Value: ” + value;
  }}).print();

env.execute();
}

用消费者信息创建一组属性,在这个应用程序中我们只能设置消费者 group.id。使用 FlinkKafkaConsumer09 来获取主题中的消息 flink-demo。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3148字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7985144
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...