Kafka 主题、分区和主题日志压缩

Kafka Topic, Partitioning and Topic Log Compaction

我是卡夫卡的新手。我有一个关于如何划分主题的问题。

我有 Kafka 主题并计划在其中加入 2 个分区。我有两个操作 - 项目创建/更新和项目验证。

项目创建/更新操作很长,需要时间才能完成。 Project Validate 运行速度更快,预计 return 会很快得到结果。

我计划有 2 个不同的密钥 - 一个用于创建/更新操作,一个用于验证操作,以便每个操作都进入单独的分区并最终由消费者组中的一个消费者监听以提高性能。

我开始了解 kafka 压缩,如果记录具有相同的密钥,则会压缩记录。这导致我的初始方法出现问题,因为所有项目创建/更新事件的密钥都是相同的,即使它们用于不同的项目。

如果我更改密钥以包含项目标识符,则不能保证所有项目创建事件都在单个分区中,这间接意味着验证操作可能需要等待很长时间 运行创建操作即将完成。

如何设计分区键?

首先,您不需要将主题设置为压缩主题,由您决定该选项是否与您的用例相关,它可以使用 cleanup.policy 主题进行配置参数,其次,像您建议的关于同一主题的两个用例不是最佳的,如果您事先知道它,您可能会更轻松地设置两个主题,说过您可以实现 PartitionAssignor 来决定将每个密钥发送到哪里,请注意默认分配器不会向您保证这两个键将转到不同的分区,它只是承诺所有具有相同键的记录将转到同一分区,不承诺每个键将转到不同的分区。

希望有道理,如果需要进一步解释,请发表评论。