如何在使用Kafka流时为消息生成id?

时间:2017-11-22 08:25:20

标签: apache-kafka-streams confluent

我想尝试在融合的kafka中阅读许多艺术品后实现正常的聊天系统。但是我在做一些结构设计时遇到了一些问题。 当使用mysql作为我的数据db时,我可以为每条有意义的消息提供id,例如user表中的user_id,消息表的message_id。在模型表中使用id之后,客户端和服务器进行一些通信非常方便。 但是在Kafka流中,如何在KTable中为每个有意义的模型提供唯一的ID?或者我真的有必要这样做吗?

1 个答案:

答案 0 :(得分:0)

也许我可以自己回答这个问题。

在mysql中,我们可以直接使用sequenceId,因为所有数据都会转到一个地方,然后自动分配一个新的id。但是当表变得太大时,我们还需要将表拆分为几个小表。在这种情况下,我们还应该为每个记录重新生成唯一的id,因为这些表中的自动生成的id从0开始。

在卡夫卡也许是一样的。当我们在kafka中只有一个分区时,我们也可以使用来自kafka生成的id的id,因为所有的消息只会到达一个地方,所以它们永远不会被复制。但是当我们想要更多分区时,我们还必须要小心,来自不同分区的这些生成的id不是全局唯一的。

所以我们应该做的就是为自己生成id。 UUID是一种快速的方法,但是我想要一个数字,我们可以用一点算法来实现它。也许在分布式环境中使用这样的结构:

[NODEID +的threadId +的current_time + auto_increased_number]