我正在用java开发poc项目,使用kafka->flink->elastic search。
在kafka上,将产生不可预测的事件数,从0到数千个事件/秒,例如特定主题。
{"gid":"abcd-8910-2ca4227527f9", "state":"stateA", "timestamp:1465566255, "other unusefull info":"..."}
Flink将消耗此事件,并应在 Elasticsearch中每秒搜索每个状态下的事件数,例如:
{"stateA":54, "stateB":100, ... "stateJ":34}
我有10个 state:【创造。。。,删除]平均生命周期为15分钟。状态每秒可以改变两次。理论上可以增加新的状态。
为了让水流每秒都下沉,我想用 Flink的时间窗https://flink.apache.org/news/2015/12/04/introduction-windows.html
问题是我需要有状态的对象,其中包含guid->previous state和stateX->count的信息,以便能够在新事件发生时增加/减少计数。
我找到了一份关于有状态蒸汽处理的文件草稿https://cwiki.apache.org/conference/display/FLINK/Stateful+Stream+Processing
我是flink和流处理的新手,我还没有深入研究flink有状态的流处理。在第一阶段,我考虑使用静态对象来实现这一点,但是当几个flink实例要启动时,这种方法就行不通了。
我想问你:
- 你觉得这种方法怎么样?
另外,我也很欣赏窗口状态流解决方案(或其他解决方案)的一些代码片段。
谢谢,