InfoQ|重新思考日志:业务系统竟然是一个大数据库?( 四 )


最后将旧的job停止 , 并删除旧表
有状态的流处理有时在流处理的过程中我们还需要join其它数据来获取所需信息 , 如果处理每条数据都需要访问数据库 , 将使得整个过程变得缓慢 。 以LinkedIn的一个应用场景为例 , Whoviewedyourprofile , 即查看谁访问过我的个人资料:
InfoQ|重新思考日志:业务系统竟然是一个大数据库?
文章图片
原始数据就是用户访问的事件流 , 每个事件的数据结构大致如下:
"eventType":"PageViewEvent","timestamp":1413215518,"viewerId":"1234","viewedProfileId":"4321",//...}这时在订阅并处理事件数据时 , 就需要将viewer的profile信息填充上:
InfoQ|重新思考日志:业务系统竟然是一个大数据库?
文章图片
最简单的方法就是从数据库取 , 那么每次重新处理就是一次全量数据获取 , 可能还会影响线上OLTP服务的稳定性 。 自然而然地 , 我们又想到在数据库和流处理之间加一层缓存:
InfoQ|重新思考日志:业务系统竟然是一个大数据库?
文章图片
那么我们何不将缓存做进流处理器中?
InfoQ|重新思考日志:业务系统竟然是一个大数据库?
文章图片
然后订阅profile的修改事件(ProfileEditEvent) , 更新流处理器本地的数据库 , 这样还能保证数据的最终一致 , 避免访问线上OLTP服务 。 这就是有状态的流处理 。
小结本书将企业中的数据、数据流、各种数据服务系统看作是一个巨型的分布式数据库 , 日志就是这个数据库系统的操作日志 , 记录着所有历史增量数据 , 并以此为基础 , 提出以日志为中心的设计思想 , 并讨论了许多数据处理场景的不同处理方案 , 耐人寻味 。
参考阅读:
I?Logs:
BigData:Principlesandbestpracticesofscalablerealtimedatasystems:
Buildingreal-timedataproductsatLinkedInwithApacheSamza:
https://www.youtube.com/watch?v=yO3SBU6vVKA&t=2233s
TheLog:Whateverysoftwareengineershouldknowaboutreal-timedata’sunifyingabstraction:
【InfoQ|重新思考日志:业务系统竟然是一个大数据库?】InfoQ读者交流群上线啦!各位小伙伴可以扫描下方二维码 , 添加InfoQ小助手 , 回复关键字“进群”申请入群 。 大家可以和InfoQ读者一起畅所欲言 , 和编辑们零距离接触 , 超值的技术礼包等你领取 , 还有超值活动等你参加 , 快来加入我们吧!


推荐阅读