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

Flink kafka 011 版本下 , 通过两阶段提交的 sink 结合 kafka 事务的功能 , 可以保证端到端精准一次 。

一些疑问与解答

Q:在 Flink consumer 的并行度的设置:是对应 topic 的 partitions 个数吗?要是有多个主题数据源 , 并行度是设置成总体的 partitions 数吗?

A:这个并不是绝对的 , 跟 topic 的数据量也有关 , 如果数据量不大 , 也可以设置小于 partitions 个数的并发数 。 但不要设置并发数大于 partitions 总数 , 因为这种情况下某些并发因为分配不到 partition 导致没有数据处理 。

Q:如果 partitioner 传 null 的时候是 round-robin 发到每一个 partition?如果有 key 的时候行为是 kafka 那种按照 key 分布到具体分区的行为吗?

A:如果在构造 FlinkKafkaProducer 时 , 如果没有设置单独的 partitioner , 则默认使用 FlinkFixedPartitioner , 此时无论是带 key 的数据 , 还是不带 key 。 如果主动设置 partitioner 为 null 时 , 不带 key 的数据会 round-robin 的方式写出 , 带 key 的数据会根据 key , 相同 key 数据分区的相同的 partition , 如果 key 为 null , 再轮询写 。 不带 key 的数据会轮询写各 partition 。

推荐阅读