如何使用带有特定分区程序的 Apache Flink 将数据作为 key/value 发送到 Kafka

How to send data as key/value to Kafka using Apache Flink with Specific Partitioner

我在 Flink 中有一个 payload,如下所示;

{
    "memberId": 4
    "total": 5
}

我想使用指定的分区程序将数据以键值格式发送到kafka。对于分区程序,我将使用 Modulo 分区程序。

模分区器示例;

partitionId = value % numPartitions

假设numPartitions参数为3,如果我们可以使用上面定义的payload的memberId,partitionId应该是4 % 3 = 1

根据上面的partitioner,我想将具有相同partitionId的数据发送到相同的kafka主题。另一个例子;

如果(假设 numPartitions = 3);

memberId: 3 => (3 % 3) => partitionId = 0 => kafka partition 1
memberId: 8 => (8 % 3) => partitionId = 2 => kafka partition 2
memberId: 2 => (2 % 3) => partitionId = 2 => kafka partition 2
memberId: 6 => (6 % 3) => partitionId = 0 => kafka partition 1
memberId: 7 => (7 % 3) => partitionId = 1 => kafka partition 2

如果我没记错的话,flink kafka producer 在我们不能指定任何键和分区函数的情况下使用 FlinkFixedPartitioner。如果我们设置分区函数为 null,flink kafka producer 将使用 round robin 分配。但我不知道如何将数据以 key/value 格式发送到 kafka,如何按模对它进行分区。我怎样才能做到这一点?

如果您使用 KafkaSerializationSchema,那么您可以创建 Kafka ProducerRecords,并设置 Kafka 键(和值)。您也可以在 ProducerRecord.

中设置分区