在流系统中,常常把数据记录叫做事件(event)。实质上是一条包含信息的数据。
批处理系统(batch process)的行为是:周期性去数据存储中拉取数据,由一个或多个worker来进行数据的处理、聚合结果(参见mapreduce)。而流处理系统则由producer将数据放到broker,由若干consumer负责实时或者准实时处理数据,也就是所谓的发布-订阅模式。
这里有两个问题是流系统设计时需要面对的:
-
当生产者发送数据的速度超过消费者处理的速度时应该怎么做?a.生产者简单丢弃无法及时处理的数据,即对事件本身加过期时间,在时间段内没有被消费者处理就丢弃;b.将消息放在队列中,这也是很多消息队列的实现方式;c.在生产者端做流量控制,协调生产者产生数据的速度。
2.节点故障时的行为,是否会导致消息丢失。是否需要做消息的磁盘持久化。
消息在broker的存储类似于日志的数据特点:只有追加不可变数据和顺序读取的操作:
类似日志的存储
通过创建不同的partition
来实现水平扩展增加数据吞吐能力,通过partition
的备份来实现高可用和故障转移。
网友评论