apache-kafka - Kafka:为跨分区的字符串生成唯一 ID
问题描述
我正在尝试评估是否可以使用 Kafka 来扩展我们当前的解决方案。我可以轻松识别分区。目前,要求有 1500 个分区,每个分区每秒有 1-2 个事件,但未来可能会高达 10000 个分区。
但是我们的解决方案有一部分我不知道如何在 Kafka 中解决。问题是每条消息都包含一个字符串,我想为整个主题的每个字符串分配一个唯一的 ID。因此,相同的字符串具有相同的 ID,而不同的字符串具有不同的 ID。ID 不需要是连续的,也不需要总是增长的。
然后这些 ID 将在下游用作唯一键来识别这些字符串。字符串可以有数百个字符长,所以我认为它们不会成为有效的键。
更高级的用法是消息可能具有不同“种类”的字符串,因此会有多个唯一的 ID 序列。并且消息将仅包含其中一些类型,具体取决于消息的类型。
另一个高级用法是值不是字符串,而是结构,如果两个结构相同,则需要一些更复杂的规则,例如如果 PropA 相等,则结构相等,如果不相等,则如果 PropB 相等,则结构相等。
为了说明这个问题:每个分区都是网络中的一台计算机。每个事件都是计算机上的操作。需要对每台计算机的事件进行排序,以便更改计算机状态的事件(例如用户登录)可以影响其他类型的事件,并且排序对此至关重要。例如。用户打开应用程序、写入文件、插入闪存驱动器等。我需要每个应用程序、文件、闪存驱动器或许多其他应用程序在所有计算机上都具有唯一标识符。然后将其用于计算下游的统计信息。有时,一个事件可能有多个,例如。对特定闪存驱动器上的特定文件进行操作。
解决方案
有一篇关于kafka 和区块链的非常好的帖子。这是集体思维的工作,我认为这可以解决您的 ID 可扩展性问题。有关解决方案,请参阅“区块链:原因”。部分。所有学分归各自作者所有。
- 想法很简单,但很有效:
- 数据是基于哈希的,链接到前一个块
- 数据可能是非常相同的哈希值,链接到相应的类型块
- 定制区块链解决方案意味着您可以控制数据编码/解码
- 每个哈希链都是自包含的,本质上可能是您的进程(hdd/ram/cpu/word/app 等)
- 每个哈希链可能本身就是一条消息
- 奖励:统计和分析可以很好地存储在区块链中,高度支持压缩和复制。在这种情况下,消费者相当便宜(可扩展性)。
过程:
- 唯一标识符问题已解决
- 所有记录链接,感谢 kafka 和区块链高度有序
- 数据可扩展
- 已应用 Kafka 属性
缺点:
- 加密/解密是 CPU 密集型的
- 哈希计算复杂度不断提高
问题:没有问题上下文,很难估计需要进一步解决的限制。但是,假设计算的解决方案具有有限的性质,您应该没有问题以常规方式缩放解决方案。
底线:如果不了解速度/成本/质量方面的要求,就很难通过工作示例给出更好的支持答案。CPU 云扩展可能比较便宜,数据存储 - 取决于您想要存储多长时间和多少数据的时间,重放能力等。这是一个很好的工作。原型?参考文章中的概念。
推荐阅读
- c# - 不对脚本的一个实例调用 FixedUpdate() 回调
- java - 30 秒后来自 SpeechClient 的 CancellationException
- python - beautifulsoup for-if 循环提取
- php - iOS Swift 5 - 通过调用 PHP 函数将文件上传到服务器
- parameters - Panel + Param 自定义 MultiFileSelector 小部件
- types - 如果无法在编译时确定,如何检测 Crystal 中的数据类型?
- java - 使用来自 POST 请求正文的 Java REST API 解析的有效嵌套 JSON 结构
- c# - SMO 备份失败并出现错误 1827(完整数据库)
- angular - 用角度+2打开插座的最佳方法是什么?
- javascript - 使用拍摄的快照作为输入文件中的文件