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

  • 此时如果 sink 为 4 , paritition 为 1 , 则 4 个 task 往同一个 partition 中写数据 。 但当 sink task < partition 个数时会有部分 partition 没有数据写入 , 例如 sink task 为2 , partition 总数为 4 , 则后面两个 partition 将没有数据写入 。

  • 如果构建 FlinkKafkaProducer 时 , partition 设置为 null , 此时会使用 kafka producer 默认分区方式 , 非 key 写入的情况下 , 使用 round-robin 的方式进行分区 , 每个 task 都会轮循的写下游的所有 partition 。 该方式下游的 partition 数据会比较均衡 , 但是缺点是 partition 个数过多的情况下需要维持过多的网络连接 , 即每个 task 都会维持跟所有 partition 所在 broker 的连接 。

  • 容错

Flink kafka 09、010 版本下 , 通过 setLogFailuresOnly 为 false , setFlushOnCheckpoint 为 true , 能达到 at-least-once 语义 。 setLogFailuresOnly , 默认为 false , 是控制写 kafka 失败时 , 是否只打印失败的 log 不抛异常让作业停止 。 setFlushOnCheckpoint , 默认为 true , 是控制是否在 checkpoint 时 fluse 数据到 kafka , 保证数据已经写到 kafka 。 否则数据有可能还缓存在 kafka 客户端的 buffer 中 , 并没有真正写出到 kafka , 此时作业挂掉数据即丢失 , 不能做到至少一次的语义 。

推荐阅读