流处理开源框架Flink原理简介和使用

spark kafka stream 示例

大数据处理工具Kafka、Zk、Spark

这篇文章描述了 如何搭建kafka、zk和spark集群环境

本篇文章先简要的举个demo来说明下代码实现过程

  • 源码
https://gitee.com/pingfanrenbiji/spark-scala-examples/blob/master/src/main/scala/com/sparkbyexamples/spark/kafka/WriteDataFrameToKafka.scala

通过spark往kafka写入数据

通过spark读取kafka数据

  • 源码
https://gitee.com/pingfanrenbiji/spark-scala-examples/blob/master/src/main/scala/com/sparkbyexamples/spark/kafka/ReadDataFromKafka.scala

Flink

1、分布式、高性能、随时可用以及准确的流处理应用程序开源处理框架

2、分布式处理引擎 用于对无界或有界数据流进行有状态的计算 

3、在所有常见的集群环境中运行 以内存执行速度和任务规模来执行计算

为什么选择Flink

  • 流数据真实的反映了我们的生活方式

  • 传统的数据架构是基于有限数据集的

  • 目标

    • 低延迟

    • 高吞吐

    • 结果的准确性和良好的容错性

哪些行业需要处理流数据

  • 电商和市场营销

    • 数据报表、广告投放、业务流程需要
  • 物联网

    • 传感器实时数据的采集和显示、实时报警、交通运输业
  • 电信行

    • 基站流量调配
  • 银行和金融业

    • 实时结算和通知推送 实时检测异常行为

传统的处理架构

  • 事务处理
  • 分析处理

    • 将数据从业务数据库复制到数仓 再进行分析和查询
  • 有状态的流式处理
  • 流处理的演变

Flink特点

  • 事件驱动型(Event-driven)
事件驱动型应用是一类具有状态的应用 他从一个或多个事件流提取数据  

并根据到来的事件触发计算、状态更新或其他的外部动作

以kafka为代表的消息队列几乎都是事件驱动型应用

  • 基于流的世界观
flink的世界观中一切都是由流组成的 
离线数据是有界限的流即有界流
实时数据是没有界限的流即无界流
无界数据流:

有一个开始但没有结束 不会在生成时终止并提供数据

必须连续处理无界流即必须在获取后立即处理

对于无界流无法等待所有数据都到达

因为输入是无界的 并且在任何时间点都不会完成 

处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event

以便能够推断结果完整性

有界数据流:

有明确的开始和结束

可以在执行任何计算之前通过获取所有数据来处理有界流

处理有界流不需要有序获取

因为可以始终对有界数据集进行排序

有界流的处理也被成为批处理

分层API

  • 越顶层越抽象 表达含义越简明 使用越方便

  • 越底层越具体 表达能力越丰富 使用越灵活

flink其他特点

  • 支持事件时间(event-time)和处理时间(processing-time)

  • 状态一致性

  • 低延迟 每秒处理数百万 毫秒级延迟

  • 众多常用存储系统连接

  • 高可用 动态扩展

Flink和Spark Streaming比较

  • 流(stream)和微批(micro-batching)

    • 流处理

      无界、实时 无需针对整个数据集执行操作 而是对通过系统传输的每个数据项执行操作 一般用于实时统计

    • 批处理

      有界、持久、大量 非常适合访问全套记录才能完成计算工作 一般用于离线统计

  • 数据模型

    • spark采用RDD模型 spark streaming的Dstream实际上也就是一组组小批数据RDD的集合 在spark的数据观 一切都是由批次组成 离线数据是一个大批次 而实时数据是由一个一个无限的小批次组成

    • flink基本数据模型是数据流以及事件(event)序列

  • 运行时架构

    • spark是批计算 将DAG划分为不同的stage 一个完成后才能计算下一个

    • flink是标准的流执行模式 一个事件在一个节点处理完之后可以直接发往下一个节点进行处理

批处理wordcount

  • 源码
https://gitee.com/pingfanrenbiji/Flink-UserBehaviorAnalysis/blob/master/FlinkTutorial/src/main/scala/com/xdl/wc/WordCount.scala

流处理wordcount

开启一个指定端口的监听
nc -lk 7777
-l 开启 监听模式,用于指定nc将处于监听模式。通常 这样代表着为一个 服务等待客户端来链接指定的端口。

-p<通信端口> 设置本地主机使用的通信端口。有可能会关闭

-k<通信端口>强制 nc 待命链接.当客户端从服务端断开连接后,过一段时间服务端也会停止监听。 但通过选项 -k 我们可以强制服务器保持连接并继续监听端口。
代码分析
  • 源码分析
https://gitee.com/pingfanrenbiji/Flink-UserBehaviorAnalysis/blob/master/FlinkTutorial/src/main/scala/com/xdl/wc/StreamWordCount.scala

JdbcSink 示例

  • 源码
https://gitee.com/pingfanrenbiji/Flink-UserBehaviorAnalysis/blob/master/FlinkTutorial/src/main/scala/com/xdl/apitest/sinktest/JdbcSinkTest.scala

数据存储可以是Mysql、Redis、Kafka、Redis

Scala Function示例

  • 源码
https://gitee.com/pingfanrenbiji/Flink-UserBehaviorAnalysis/blob/master/FlinkTutorial/src/main/scala/com/xdl/apitest/tabletest/udftest/ScalarFunctionTest.scala

结语

下篇文章介绍下flink环境搭建过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值