基于密钥在风暴螺栓中汇总来自Kafka的消息

时间:2018-03-13 22:34:44

标签: apache-kafka apache-storm aggregation

背景

后端日志处理系统已经与Kafka和Storm集群一起使用。

使用案例

生成某些类型X的多个事件并在后端登录。每个都包含一个id userid。现在这些事件由一个风暴螺栓消耗并提取useid和其他一些字段说userdata并写入kafka中的另一个主题,比如data主题。

现在,此data主题消耗了一些其他拓扑。它通过单个userid和不同userdata找到多个此类事件。如果有n个这样的记录,则需要采取一些行动。

问题

如何使用来自kafka的一些关键数据在风暴中聚合? 有些用户可能会在20分钟内达到N记录计数,有些用户可能需要几个小时,具体取决于用户互动,因此事件记录在后端。目标是在此类记录的计数达到某个N

时获取所有用户ID和相应的usedata

1 个答案:

答案 0 :(得分:0)

这不是特定于Storm的问题,而是与用户会话管理相关联。如果您希望系统面临很多会话,这些会话需要很长时间才能达到某种状态(在您的情况下达到always个事件)并最终在此期间构建大量数据,那么您需要进行帐户管理在你的设计中,这意味着明智地选择import codecs with codecs.open('README.rst', 'r', encoding='utf-8') as readme_file: readme = readme_file.read() 并围绕它构建大量的集成测试,检查你的系统在负载下保持响应。

你可以

  • 考虑根据负载和统计信息使n动态化(我猜这是DevOps的全部内容)
  • 仅存储n n并将数据保存在数据库或文件系统中,并在n达到临界值时将其恢复。这在某种程度上与流式拓扑结构的观点相矛盾,但它开始有意义,特别是如果你需要在处理后保留(部分)数据。

如果您想部署软件更新,则还需要考虑除userid之外的时间值n,因为会话越短,连续部署就越容易。