Kafka:为跨分区的字符串生成唯一的ID

时间:2018-07-02 04:42:18

标签: apache-kafka uniqueidentifier

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

免责声明:如果可以的话,我会将其添加为评论。

关于kafka and blockchain的帖子非常好。这是集体的头脑工作,我认为这可以解决您的ID可伸缩性问题。有关解决方案,请参阅“区块链:原因”。部分。所有学分归各自作者所有。

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

过程:

  • 唯一标识符问题已解决
  • 所有记录都已链接,多亏了kafka和区块链的高度支持
  • 数据可扩展
  • 已应用卡夫卡属性

缺点:

  • 加密/解密需要占用大量CPU
  • 哈希计算复杂度的增长水平

问题:在没有问题上下文的情况下,很难估算出需要进一步解决的局限性。但是,假设计算出的解决方案具有有限的性质,那么您应该没有规律地缩放解决方案的问题。


底线: 如果没有对速度/成本/质量方面的要求的了解,就很难通过工作示例给出更好的后盾。 CPU云扩展可能相对便宜,数据存储-取决于时间,要存储多长时间和数据量,重播能力等。这是一项很好的工作。原型?参考文章中的概念。