我想尝试在融合的kafka中阅读许多艺术品后实现正常的聊天系统。但是我在做一些结构设计时遇到了一些问题。
当使用mysql作为我的数据db时,我可以为每条有意义的消息提供id
,例如user表中的user_id,消息表的message_id。在模型表中使用id之后,客户端和服务器进行一些通信非常方便。
但是在Kafka流中,如何在KTable中为每个有意义的模型提供唯一的ID?或者我真的有必要这样做吗?
答案 0 :(得分:0)
也许我可以自己回答这个问题。
在mysql中,我们可以直接使用sequenceId,因为所有数据都会转到一个地方,然后自动分配一个新的id。但是当表变得太大时,我们还需要将表拆分为几个小表。在这种情况下,我们还应该为每个记录重新生成唯一的id,因为这些表中的自动生成的id从0开始。
在卡夫卡也许是一样的。当我们在kafka中只有一个分区时,我们也可以使用来自kafka生成的id的id,因为所有的消息只会到达一个地方,所以它们永远不会被复制。但是当我们想要更多分区时,我们还必须要小心,来自不同分区的这些生成的id不是全局唯一的。
所以我们应该做的就是为自己生成id。 UUID是一种快速的方法,但是我想要一个数字,我们可以用一点算法来实现它。也许在分布式环境中使用这样的结构:
[NODEID +的threadId +的current_time + auto_increased_number]