笔者在日常工作中遇到了一个问题,在做实时数仓调用第三方Thrift服务来补充维度信息时,第三方提供的服务可以同时传入一个或者多个查询条件,如果传入多个查询条件,则会返回多条结果。 在上述场景下,有如下几种调用第三方服务的方法。
-
Flink异步调用Thrift服务,每次传入一个参数。
-
Flink异步调用Thrift服务,设置固定时间的时间窗口,当窗口结束时,将多个查询条件组织到一起并将请求发送出去。
-
Flink异步调用Thirft服务,添加可以实现固定时长或者消息条数的触发器。
上面这三种方案中:
方案1 由于未使用窗口与触发器,虽然使用了异步调用,但是由于每次只发送含一个参数的请求,针对于每条输入数据,都要发送一次,较为耗时。
方案2 由于需要等待窗口结束后才会发送请求,会无形给下游造成一定的延迟。
方案3 中当固定窗口结束或者窗口内数据条数达到设定长度后都会触发后续的数据处理。
综合看,方案3更加适合上述场景。
Flink 自带的触发器如下:
触发器名称 |
触发条件 |
---|---|
CountTrigger |
指定条数触发 |
ContinuousEventTimeTrigger |