如何使用Flink处理此计算

时间:2018-03-25 12:36:15

标签: apache-flink flink-streaming

我想使用Flink进行实时过滤。 我们的想法是将密钥值存储为累加器,并计算所有密钥的总和与比率。

我知道在密钥操作员之间共享状态是不可能的,因此我无法计算总价值

示例:

  1. k1,1
  2. k2,3
  3. k1,1
  4. k2,5
  5. k3,0
  6. 我需要在流上计算以下比率 1 / 1,3 / 4,2 / 5,8 / 10,0(总是被过滤)等......

    感谢您的帮助

1 个答案:

答案 0 :(得分:1)

使用以下状态创建自定义有状态运算符:

int totalSum;
Map<Key,Ratio> map;

每个事件都会增加总和,然后根据事件键更新地图。

示例:

在第一个事件k1,1之后,你的州是:

totalSum 1
map 
   k1, 1/1

你发出了这个事件:k1, 1/1

==

在第二个事件k2,3之后,你的州是:

totalSum 4
map 
   k1, 1/1
   k2, 3/4

你发出了这个事件:k2, 3/4

[..继续]