传递事件流
Posted JavaEdge.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传递事件流相关的知识,希望对你有一定的参考价值。
批处理领域,作业的输入和输出是文件(也许在分布式文件系统)。流处理领域中的等价物是啥呢?
当输入是一个文件(一个字节序列),第一个处理步骤通常是将其解析为一系列记录。在流处理的上下文中,记录通常被叫做事件(event) ,本质是一样的:一个小的、自包含的、不可变的对象,包含某时间点发生的某事的细节。一个事件通常包含一个来自日历时钟的时间戳,以指明事件发生的时间。
发生的事件可能是:
-
用户行动,如查看页面或进行购买
-
也可能源于机器,如对温度传感器或 CPU 利用率的周期性测量
“使用 Unix 工具的批处理” 的示例中,Web 服务器日志的每一行都是个事件。
事件可能被编码为文本字符串或JSON或二进制编码。这允许你存储一个事件,如将其追加到一个文件,将其插入关系表或写入文档DB。还允许你通过网络将事件发送到另一个节点处理。
批处理中,文件被写入一次,然后可能被多个作业读取。流处理中,一个事件:
- 由producer(也称publisher、sender)生成一次
- 可能由多个consumer( subscribers、recipients)处理。文件系统中,文件名标识一组相关记录;流式系统中,相关的事件通常被聚合为一个主题(topic)或流(stream)。
文件或数据库就足以连接Pro和Con:Pro将其生成的每个事件写入数据存储,且每个Con定期轮询数据存储,检查自上次运行以来新出现的事件。这正是批处理每天结束时处理当天数据时所做之事。
但当想进行低延迟连续处理时,若数据存储不是为这种用途专门设计,则轮询开销很大。轮询越频繁,能返回新事件的请求比例就越低,额外开销越高。最好能在新事件出现时直接通知Con。
数据库在传统上对这种通知机制支持的并不好,关系型数据库有触发器(trigger),可对变化(如插入表中的一行)反应,但功能有限,且在数据库设计中有些后顾之忧。已开发了专门的工具来提供事件通知。
以上是关于传递事件流的主要内容,如果未能解决你的问题,请参考以下文章
在流分析工作并将它们路由到服务总线之后,事件中心中的事件会发生啥?