参考链接:
Client,JobManager,TaskManager
Flink 内部处理协调、网络、checkpoint,failover,API,算子,资源管理等功能的代码位于 flink-dist.jar
,为了保证 Flink 核心的精简,只在 /lib
目录下存放必要的 jar,而将其他功能性的 jar 放入到 /opt
和 /plugins
目录下。如果用户有需要将 /opt
目录下的 jar 移入 /lib
和 /plugins
目录下即可。
另外连接三方数据源的 connectors 和 formats 不在 /lib
和 /plugins
目录下,这样是为了避免用不到的代码存在 flink 运行环境中,需要用户在 flink 应用中按需添加。connectors 和 formats 相关代码也从 flink 仓库拆分到了独立的代码仓库。
参考链接:
参考链接:
场景:关联维表数据
解决同步 I/O 低吞吐的 4 种解决方案:
异步处理,使用异步 I/O 时,需数据库客户端支持异步请求,如果客户端不支持异步请求,需通过线程池将同步调用转为异步调用。
顺序性。异步 I/O 返回的数据顺序是否和同步 I/O 顺序保持一致?答案是默认是乱序的,Flink 异步 I/O 提供了两种模式:
异步 I/O 与事件时间。
在无序模式下,异步 I/O 返回的数据顺序和数据输入顺序不一致,而错误的事件时间会使时间窗口产出错误的结果。那么在异步 I/O 之后应用事件时间窗口是否可行?答案是可以的。虽然是无序模式,异步 I/O 算子依然可以保证事件时间下的时间窗口计算结果正确。异步 I/O 算子通过 watermark 建立数据产出顺序的边界,相邻的两个 watermark 之间的数据可能是无序的,但是同一个 watermark 前后的数据依然是有序的。
参考连接:
时间语义:
时间窗口:
水位线
数据会乱序,针对乱序的数据或延迟的数据,窗口该如何处理:
乱序/延迟解决方案:watermark / allowLateNess / sideOutPut:
watermark 实际上是一个 unix ms 时间戳,表示早于该时间的数据已全部抵达,不会再有时间小于水位线的数据输入。watermark 只能增大,不能减小。
watermark 类型:
参考链接:
如何优化 checkpoint 过大问题,如何用 flink sql 去重