【问题标题】:how to generate id for message when using Kafka stream?使用Kafka流时如何为消息生成ID?
【发布时间】:2017-11-22 08:25:19
【问题描述】:

在阅读了很多confluent kafka中的文章后,我想尝试实现一个正常的聊天系统。但是我在做一些结构设计的时候遇到了一些问题。 当使用 mysql 作为我的数据数据库时,我可以将id 分配给每条有意义的消息,例如用户表中的 user_id,消息表中的 message_id。在模型表中有id后,客户端和服务器进行一些通信非常方便。 但是在 Kafka 流中,如何在 KTable 中为每个有意义的模型赋予唯一的 id?还是我真的有必要这样做?

【问题讨论】:

  • 这个问题非常广泛。生成随机的UUIDs 还不够吗? docs.oracle.com/javase/7/docs/api/java/util/UUID.html
  • 随机UUID Id是一种方法,但如果我想要一个像mysql这样的序列号?我该怎么做?我想知道是否有标准的方式给消息提供 id 是 kafka 流?另一方面,uuid 对于密钥来说太长并且生成速度有点慢。

标签: apache-kafka-streams confluent-platform


【解决方案1】:

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

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

也许卡夫卡也是如此。当我们在 kafka 中只有一个分区时,我们也可以使用 kafka 生成的 id 中的 id,因为所有消息都只会去一个地方,所以它们永远不会被复制。但是当我们想要更多的分区时,我们也必须注意这些从不同分区生成的 id 不是全局唯一的。

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

[nodeid+threadId+current_time+auto_increased_number]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2021-10-11
    • 1970-01-01
    • 2019-03-14
    • 2021-05-08
    • 2018-03-09
    • 1970-01-01
    相关资源
    最近更新 更多