目录
1. application未来能扩展到的最大parallelism
默认的值由application第一次启动时决定:
- 如果所有operator的最大parallelism小于等于128,则默认值等于128
- 否则默认值 = MIN(nextPowerOfTwo(parallelism + (parallelism / 2)), 2^15),其中nextPowerOfTwo取值规则是,比如nextPowerOfTwo(1000), 最接近的2的指数是2 ^10 = 1024,所以nextPowerOfTwo(1000) = 1024
控制application能扩展的最大parallelism的原因是,为了application的性能
指定的粒度为application、operator,通过setMaxParallelism(maxParallelism: Int)进行指定,指定范围为0 < parallelism <= max parallelism <= 2^15
一旦指定,application启动后就不可修改,除非不用之前的State
2. 为DataStream的所有operator设置uuid
因为state和operator需要保存一一对应关系,如果修改一个operator,则对应的state就不能匹配,所以需要给operator设置uuid,来保证关系的唯一性
可以通过datastream.uid(“test_uid”)为每一个Datastream进行设置
3. 选择合适的State Backend
4. 选择合适的Checkpoint时间间隔
选择时,需要考虑的3点如下:
- 假如task在checkpoint A的前一秒失败了,则checkpoint A的所有数据该task都要重新处理。所以checkpoint时间间隔小,重新处理的数据少,反之
- 对于Exactly-Once Sink,比如Kafka或FileSink,只有checkpoint完成的数据才是可见的。checkpoint时间间隔小,结果刷新的快,但是对于Sink处理压力大,反之。所以需要在满足生产需求和系统压力之间做权衡
- checkpoint支持和数据处理异步进行,所以checkpoint时间间隔小,会影响数据处理的资源,反之。可以考虑使用Incremental checkpointing来减轻这种情况
5. 搭建一个高可用HA集群,保证JobManager高可用
参考我的在Centos7上基于Zookeeper实现Flink1.13.2的高可用HA搭建(Standalone和Yarn版本)
2290

被折叠的 条评论
为什么被折叠?



