Flink 流式传输,如何进行计数?
Posted
技术标签:
【中文标题】Flink 流式传输,如何进行计数?【英文标题】:Flink streaming, how to do the counting? 【发布时间】:2019-03-28 07:11:03 【问题描述】:我遇到了一个帖子Scaling Klaviyo’s Event processing Pipeline with Stream Processing,在帖子中,名为 Klaviyo 的公司的人在不同的时间范围内进行计数,每小时、每天甚至每月。
我有几个问题,如果我理解正确的话,他们正在使用timewindow,但是像一天这样长时间使用timewindow是否正常?!
这对我来说没有意义,如果您要进行每日或每月计数,为什么不使用批处理?在这种情况下使用流媒体的根本好处是什么?
另一种情况,如果我需要从一开始就实时统计kafka事件,现实世界的解决方案是什么?每次事件到达时使用 flink 流来更新 redis 中的“计数器”?如果kafka很忙,比如每秒几百万条消息,会不会有太多的IO和网络?
【问题讨论】:
【参考方案1】:如果你每天或每月做一次,那对我来说没有意义 计数,为什么不使用批处理?什么是根本 在这种情况下使用流媒体有什么好处?
当然,您可以进行其他批处理。但是您将如何处理重新处理?你必须重启批处理和实时进程,数据可能不匹配,因为你有两个进程。
对于以天为单位的聚合,有 Rocks-db 解决方案,因此数据不会爆炸内存。 (在 KafkaStream 中,数据甚至被存储回 Kafka)。
如果您需要在每次事件发生时更新计数器,那么问题是是否有人需要以 0.001 毫秒查看计数器?因为您可以在 0.3 秒内批量处理流式传输管道,而人们处于最佳状态时可以感知到。这就是为什么人们也说near-realtime
,这意味着它不是实时的,但它已经满足了需求。
【讨论】:
谢谢你的回答,如果时间范围是每小时、每天和每月,我想我们可以使用批处理+一些调度系统,为什么会有2个进程? 是的,每小时一次,每天不需要两次。如果每分钟使用一次,或者您将需要一个实时过程和一个批处理过程以上是关于Flink 流式传输,如何进行计数?的主要内容,如果未能解决你的问题,请参考以下文章