首页 > 解决方案 > Kafka:为跨分区的字符串生成唯一 ID

问题描述

我正在尝试评估是否可以使用 Kafka 来扩展我们当前的解决方案。我可以轻松识别分区。目前,要求有 1500 个分区,每个分区每秒有 1-2 个事件,但未来可能会高达 10000 个分区。

但是我们的解决方案有一部分我不知道如何在 Kafka 中解决。问题是每条消息都包含一个字符串,我想为整个主题的每个字符串分配一个唯一的 ID。因此,相同的字符串具有相同的 ID,而不同的字符串具有不同的 ID。ID 不需要是连续的,也不需要总是增长的。

然后这些 ID 将在下游用作唯一键来识别这些字符串。字符串可以有数百个字符长,所以我认为它们不会成为有效的键。

更高级的用法是消息可能具有不同“种类”的字符串,因此会有多个唯一的 ID 序列。并且消息将仅包含其中一些类型,具体取决于消息的类型。

另一个高级用法是值不是字符串,而是结构,如果两个结构相同,则需要一些更复杂的规则,例如如果 PropA 相等,则结构相等,如果不相等,则如果 PropB 相等,则结构相等。

为了说明这个问题:每个分区都是网络中的一台计算机。每个事件都是计算机上的操作。需要对每台计算机的事件进行排序,以便更改计算机状态的事件(例如用户登录)可以影响其他类型的事件,并且排序对此至关重要。例如。用户打开应用程序、写入文件、插入闪存驱动器等。我需要每个应用程序、文件、闪存驱动器或许多其他应用程序在所有计算机上都具有唯一标识符。然后将其用于计算下游的统计信息。有时,一个事件可能有多个,例如。对特定闪存驱动器上的特定文件进行操作。

标签: apache-kafkauniqueidentifier

解决方案


有一篇关于kafka 和区块链的非常好的帖子。这是集体思维的工作,我认为这可以解决您的 ID 可扩展性问题。有关解决方案,请参阅“区块链:原因”。部分。所有学分归各自作者所有。

  • 想法很简单,但很有效:
    • 数据是基于哈希的,链接到前一个块
    • 数据可能是非常相同的哈希值,链接到相应的类型块
    • 定制区块链解决方案意味着您可以控制数据编码/解码
    • 每个哈希链都是自包含的,本质上可能是您的进程(hdd/ram/cpu/word/app 等)
    • 每个哈希链可能本身就是一条消息
  • 奖励:统计和分析可以很好地存储在区块链中,高度支持压缩和复制。在这种情况下,消费者相当便宜(可扩展性)。

过程:

  • 唯一标识符问题已解决
  • 所有记录链接,感谢 kafka 和区块链高度有序
  • 数据可扩展
  • 已应用 Kafka 属性

缺点:

  • 加密/解密是 CPU 密集型的
  • 哈希计算复杂度不断提高

问题:没有问题上下文,很难估计需要进一步解决的限制。但是,假设计算的解决方案具有有限的性质,您应该没有问题以常规方式缩放解决方案。


底线:如果不了解速度/成本/质量方面的要求,就很难通过工作示例给出更好的支持答案。CPU 云扩展可能比较便宜,数据存储 - 取决于您想要存储多长时间和多少数据的时间,重放能力等。这是一个很好的工作。原型?参考文章中的概念。


推荐阅读