kafka:为跨分区的字符串生成唯一的id

vcirk6k6  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(455)

我在评估Kafka是否可以用来扩大我们目前的解决方案。我可以很容易地识别分区。目前,要求有1500个分区,每个分区每秒有1-2个事件,但将来可能会高达10000个分区。
但我们的解决方案中有一部分我不知道在Kafka是如何解决的。问题是每条消息都包含一个字符串,我想在整个主题中为每个字符串分配一个唯一的id。所以相同的字符串有相同的id,而不同的字符串有不同的id。ID不需要是连续的,也不需要总是增长的。
然后,这些id将作为唯一键在下游使用,以标识这些字符串。字符串可以有几百个字符长,所以我认为它们不能成为有效的键。
更高级的用法是消息可能有不同的“种类”字符串,因此会有多个唯一的ID序列。根据消息的类型,消息将只包含其中的一些类型。
另一个高级用法是,值不是字符串,而是结构,如果两个结构相同,则需要更详细的规则,例如如果propa相等,则结构相等,如果propb相等,则结构相等。
为了说明这个问题:每个分区都是网络中的一台计算机。每个事件都是计算机上的操作。事件需要按计算机排序,这样更改计算机状态的事件(如用户登录)就可以影响其他类型的事件,而排序对这一点至关重要。用户打开应用程序,写入文件,插入闪存驱动器等。。我需要每个应用程序、文件、闪存驱动器或其他许多程序在所有计算机上都有唯一的标识符。然后用它来计算下游的统计数据。有时,一个事件可以有多个这样的操作,例如对特定闪存驱动器上的特定文件的操作。

3hvapo4f

3hvapo4f1#

有一个关于Kafka和区块链的非常好的帖子。这是一个集体的思想工作,我认为这可以解决您的ids可伸缩性问题。有关解决方案,请参阅“区块链:原因”部分。所有学分归各自作者所有。
想法很简单,但效率很高:
数据是基于哈希的,链接到上一个块
数据很可能是相同的散列,链接到相应的类型块
自定义块链解决方案意味着您可以控制数据编码/解码
每个散列链都是独立的,基本上可能是您的进程(hdd/ram/cpu/word/app等)
每个散列链可以是消息本身
好处:统计和分析可以很好地存储在区块链中,并高度支持压缩和复制。在这种情况下(可伸缩性),消费者是相当便宜的。
过程:
唯一标识符问题已解决
所有记录都链接在一起,感谢Kafka和区块链的高度有序
数据可扩展
应用Kafka特性
欺骗:
加密/解密是cpu密集型的
哈希计算复杂性不断提高
问题:如果没有问题背景,很难估计需要进一步解决的限制。但是,假设计算出的解具有有限性,则以常规方式缩放解应该没有问题。
一句话:如果不了解速度/成本/质量方面的要求,就很难给出一个更好的、有支持的答案。cpu云扩展可能相对便宜,数据存储-取决于你要存储多长时间和多少数据,重放能力等,这是一个很好的工作块。原型?参考文献中的概念。

相关问题