----
状态
单纯处理单个事件很简单,但涉及多个事件时需要跟踪更多信息,这些信息被称为“状态”。
状态通常存储在应用程序的本地变量中,如散列表。...许多设计将数据拆分到子流使用本地状态处理。
外部状态:使用外部数据存储维护,如NoSQL系统Cassandra。大小无限制,多个应用实例可访问,但增加延迟和复杂度。...大部分流式处理应用避免外部存储,或缓存在本地减少交互以降低延迟,引入内外状态一致性问题
----
流和表的二元性
表是记录的集合,具有主键和schema定义的属性,记录可变,查询可得某时刻状态,如CUSTOMERS_CONTACTS...需维护流状态,如保存最小最大值和新值比较。可通过本地状态实现,每操作一组聚合,如下图。Kafka分区确保同代码事件同分区。每个应用实例获取分配分区事件,维护一组股票代码状态。...这样一来,user_id:42 的点击事件就被保存在点击主题的分区 5 上,而所有 user_id:42 的搜索事件被保存在搜索主题的分区 5 上。