Flink引擎与Kafka
Flink是流处理框架,Kafka消息队列是最广泛使用的消息队列(JDQ、JMQ),Flink引擎通常用来处理 Kafka消息队列中的消息(Topic);
Flink 介绍
- Flink 提供两种类型类型 API:DataStream API; Table API;(数据流中同样提供两种API形式做数据处理,并提供可以进行转换的算子进行不同API间算子的串联)
- Datastream API 和 Table API 不相互依赖,可以混合使用
- 支持流处理和批处理
- 共享槽位组,可以实现资源隔离(Java 线程上隔离)
- 支持并行度设置,客户端执行预处理并转换为并行数据流形式,由TM和JM来执行
重要特性
支持窗口类型
- 滑动窗口,移动窗口,移动window slile, window_slide < window_size
- 滚动窗口,window_slide = 0时的窗口
- 会话窗口和全局窗口用的不多
Flink 按照时间窗口(window)来处理流数据,把缓存在内存中数据进行批处理。通过连接曝光数据和点击数据,计算 CTR。问题?分割两个窗口怎么办?
滑动窗口提供给两窗口时间间隔足够时间做 Join,避免数据遗漏
支持有状态流
- 容错机制完善,提供checkpoint和statebackends(状态存储)功能
- 提供 memory、filesystem、rocksDB三种类型的状态存储机制
Kafka 介绍
- 分布式的、多副本,基于 Zookeeper 的分布式消息流平台
- 多用于提交日志从而做全链路分析、流量跟踪(点击流)从而做推荐、实时监控
- 支持消息压缩,支持LZ4、snappy等格式
特性
- 高吞吐,10几万条消息/s
- 高伸缩,每个主题包含多个 partition
- 容错性,集群中某个节点失败,Kafka集群可以正常工作
- 支持设置检查点,可以从停止时的检查点重新启动
- 支持重置位点功能,可以从指定位点进行消费
- 提供多消费者、生产者、broker(独立Kafka服务器,域名+端口号)
Flink批流一体Kappa架构浅谈
优点
- 无存储系统,运行速度快
- 增加数据重播功能,数据落盘后进行落盘数据处理,保证代码维护一致性
难点
- 已构造数据体系
- 批流一体难以共享一套代码,复杂特征(用户观看视频的百分比)
- 数据时间跨度大、计算复杂,难以实现
实操
1 | DataStream<Rating> ratingStream = inputStream.map(Rating::new); |