哪个设置检查点间隔(毫秒)?

Via*_*kov 0 apache-flink flink-streaming flink-cep

每个人。
请帮我。
我编写了 apache flink streraming 作业,它从 apache kafka 读取 json 消息(几秒钟内 500-1000 条消息),在 POJO 中反序列化它们并执行一些操作(filter-keyby-process-sink)。我使用具有 ExactlyOnce 语义的 RocksDB 状态后端。但我不明白我需要设置哪个检查点间隔?
有些论坛的人写的时间大多是 1000 或 5000 毫秒。我尝试将间隔设置为10ms、100ms、500ms、1000ms、5000ms。我没有注意到任何差异。

Dav*_*son 7

有两个因素支持合理较小的检查点间隔:

(1) 如果您使用执行两阶段事务提交的接收器(例如 Kafka 或 StreamingFileSink),那么这些事务将仅在检查点期间提交。因此,作业输出的任何下游消费者都会遇到由检查点间隔控制的延迟。

请注意,除非您已采取端到端的恰好一次语义所需的所有步骤,否则您不会在 Kafka 中遇到这种延迟。这意味着您必须Semantic.EXACTLY_ONCE在 Kafka 生产者中进行设置,并将isolation.level下游消费者中的设置为read_committed。如果您这样做,您还应该增加transaction.max.timeout.ms超出默认值(15 分钟)的时间。请参阅文档了解更多信息。

(2) 如果您的作业失败并需要从检查点恢复,输入将回滚到检查点中记录的偏移量,并且处理将从那里恢复。如果检查点间隔很长(例如 30 分钟),那么您的作业可能需要相当长的时间才能恢复到再次近乎实时地处理事件的程度(假设您正在处理实时数据)。

另一方面,检查点确实会增加一些开销,因此过于频繁地执行检查点会对性能产生影响。