可以考虑用flink cep,应该可以解决你的问题。

------------------ 原始邮件 ------------------
发件人:&nbsp;"Djeng Lee"<lee.ro...@gmail.com&gt;;
发送时间:&nbsp;2019年12月5日(星期四) 下午2:40
收件人:&nbsp;"user-zh@flink.apache.org"<user-zh@flink.apache.org&gt;;

主题:&nbsp;Re: 回复: 回复:如何用SQL表达对设备离在线监控



上线时间,前n窗口count == 0 , 后n窗口count &gt; 1。说明是上线。由此得出上线时间.
离线时间,前n 窗口count&gt;=1, 后n窗口count==0,说明下线,由此可得下线时间。
前n后n都&gt;1 作为心跳维持。



在 2019/12/5 下午2:06,“Yuan,Youjun”<yuanyou...@baidu.com&gt; 写入:

&nbsp;&nbsp;&nbsp; 谢谢你的回复。
&nbsp;&nbsp;&nbsp; 
这种方案比较有意思,只是还不能区分设备第一次心跳产生的count=1的消息(上线),和设备最后一次心跳产生的count=1的消息(下线)
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; -----邮件原件-----
&nbsp;&nbsp;&nbsp; 发件人: 1193216154 <1193216...@qq.com&gt; 
&nbsp;&nbsp;&nbsp; 发送时间: Wednesday, December 4, 2019 9:39 PM
&nbsp;&nbsp;&nbsp; 收件人: user-zh <user-zh@flink.apache.org&gt;
&nbsp;&nbsp;&nbsp; 主题: 回复:如何用SQL表达对设备离在线监控
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 设定一个滑动窗口,窗口大小大于等于2n,滑动间隔大于等于n,若一次窗口结算,count 大于等于2,则在线,否则下线
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; ---原始邮件---
&nbsp;&nbsp;&nbsp; 发件人: "Yuan,Youjun"<yuanyou...@baidu.com&amp;gt;
&nbsp;&nbsp;&nbsp; 发送时间: 2019年12月4日(周三) 晚上6:49
&nbsp;&nbsp;&nbsp; 收件人: 
"user-zh@flink.apache.org"<user-zh@flink.apache.org&amp;gt;;
&nbsp;&nbsp;&nbsp; 主题: 如何用SQL表达对设备离在线监控
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; Hi all,
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 
假设我们有很多设备,设备正常工作期间会定时发送心跳到服务器。如果某个设备在超过N分钟的时间内,没有发送任何心跳到服务器,服务器会认为设备已经离线。直到下一次心跳,才判定设备为在线。
&nbsp;&nbsp;&nbsp; 需求:在判定设备离线时,产出一条设备离线消息;在设备经过一次离线后,第一次心跳时,产出一条设备上线的消息;
&nbsp;&nbsp;&nbsp; 假设设备上报的消息包含当前时间(ts)和设备id(deviceid):
&nbsp;&nbsp;&nbsp; 1575456144,dev1
&nbsp;&nbsp;&nbsp; 1575456146,dev2
&nbsp;&nbsp;&nbsp; 1575456147,dev1
&nbsp;&nbsp;&nbsp; ….
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 产出的离在线消息分别格式如下(第一列为设备离在线时间):
&nbsp;&nbsp;&nbsp; 1575456158,dev1,offline
&nbsp;&nbsp;&nbsp; 1575456169,dev2,online
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 能否用一条SQL来定义这个作业呢?
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 谢谢!
&nbsp;&nbsp;&nbsp; 袁尤军
&nbsp;&nbsp;&nbsp;

回复