
20
|
第
2
章
2.3.1
兼具高性能和持久性
消息传输层的一个作用是作为流处理层上游的安全队列——它相当于缓冲
区,可以将事件数据作为短期数据保留起来,以防数据处理过程发生中断。
直到最近几年,高性能和持久性不可兼得的困境才被打破。人们习惯上认
为流数据从消息传输层到流处理层之后就被丢弃:用了就没了。
为了设计新一代的流处理架构,高性能和持久性不可兼得是首先要改变的
一个观念。兼具高性能和持久性对于消息传输系统来说至关重要;
Kafka
和
MapR Streams
都可以满足这个需求。
具有持久性的好处之一是
消息可以重播
。这个功能使得像
Flink
这样的处理
器能对事件流中的某一部分进行重播和再计算(第
5
章会详细介绍)。正是
由于消息传输层和流处理层相互作用,才使得像
Flink
这样的系统有了准确
处理和“时空穿梭”(指重新处理数据的能力)的保障,认识到这一点至关
重要。
2.3.2
将生产者和消费者解耦
采用高效的消息传输技术,可以从多个源(生产者)收集数据,并使这些
数据可供多个服务或应用程序(消费者)使用,如图
2-2
所示。
Kafka
和
MapR Streams
把从生产者获得的数据分配给既定的主题。数据源将数据
推送给消息队列,消费者(或消费者群组)则拉取数据。事件数据只能
基于给定的偏移量从消息队列中按顺序读出。生产者并不向所有消费者自
动广播。这一点听起来微不足道,但是对整个架构的工作方式有着巨大的
影响。
这种传输方式——消费者订阅感兴趣的主题——意味着消息立刻到达,
但
并不需要被立刻处理
。在消息到达时,消费者并不需要处于运行状态,而 ...