如何正确使用Flink Connector?(13)

  • Timestamp Extraction/Watermark 生成

我们知道当 Flink 作业内使用 EventTime 属性时 , 需要指定从消息中提取时戳和生成水位的函数 。 FlinkKakfaConsumer 构造的 source 后直接调用 assignTimestampsAndWatermarks 函数设置水位生成器的好处是此时是每个 partition 一个 watermark assigner , 如下图 。 source 生成的时戳为多个 partition 时戳对齐后的最小时戳 。 此时在一个 source 读取多个 partition , 并且 partition 之间数据时戳有一定差距的情况下 , 因为在 source 端 watermark 在 partition 级别有对齐 , 不会导致数据读取较慢 partition 数据丢失 。

2.Flink kafka Producer

  • Producer 分区

使用 FlinkKafkaProducer 往 kafka 中写数据时 , 如果不单独设置 partition 策略 , 会默认使用 FlinkFixedPartitioner , 该 partitioner 分区的方式是 task 所在的并发 id 对 topic 总 partition 数取余:parallelInstanceId % partitions.length 。

推荐阅读