以上头图出自本文作者 潇慕雨Muyoo
个人博客站点: http://www.xmuyoo.com
原文:Putting Apache Kafka To Use: A Practical Guide to Building a Stream Data Platform
这篇文章是Kafka开发团队的Leader Jay Kreps所写。文章里主要介绍一个流式数据处理平台的概要,也包括这位大牛在实际工作中的经验。
核心理念
这篇文章分为Part1和Part2,分别介绍了两点:第一,以流数据为核心的数据处理平台的架构,任何数据都可以是流式的数据;第二,在数据平台中,统一数据格式,并且使用一种带有schema信息的数据格式。
一切皆为流
这个说法也许有些偏激。但笔者同样赞同作者的这个观念,即进入数据系统的任何数据都可以看作是流式数据。外部业务上例如电商平台,用户的点击、搜索、购买行为数据都是一个接一个的Event Flow;内部系统上如系统产生的日志,也是随时间推移产生的日志流,甚至是关系型数据库的操作也是一连串的Event Flow(如MySQL的binlog)。
在这个概念下,我们就可以想象有这么一个大管子,它的里面细分很多小管子,每个小馆子里面都在源源不断地流淌着某种类型的数据流。
然后在这个大管子上有很多的槽口,可以跟管子外的其它部件对接。这些部件把数据流从管子里取出来处理;处理后的结果可以再放回大管子里的某个不同于之前的小管子里,或者不放回去。这些连接到管子上的部件可以是Applications、Hadoop、Monitor、RDS、Analysis Server等等。就有了下面这张图:
各个部件在接入管子时也有上下游之分,所以在数据的处理流程上也许是这样的:
统一“度量衡”
统一数据格式,统一“度量衡”。战国时期各国之间度量衡各不相同,造成各国之间要相互转化标准十分麻烦,使文化、经济难以相通;Unix系统下,因为有管道“|”这个神器,就可以让各种命令之间的结果以统一的ASCII Text格式在标准输出与标准出入之间无障碍传递,极大提高Unix系统的易用性。
这一反一正两个例子充分说明作者提出的“统一数据格式”的观念是多么重要。并且,不仅要统一数据格式,还要使用一种带有schema信息的数据格式。这样的好处是:
- 统一数据格式使数据平台里各个组件、服务之间的数据交流变得很简单,易维护;省去了转换数据格式的工作量,同时也避免由此带来的数据异常问题。
- 使用带有schema信息的数据格式,会让数据使用变得灵活、简洁。schema信息相当于是数据的含义描述,当下游有很多使用者时,下游的人可以依据描述自行决定数据使用而不依赖、影响别的服务;同时上下游的生产者与消费者也极大减少了不必要的交流成本。(详细关于schema的说明可以参考原文。)
- 由上可给数据平台带来更好的扩展性。
对于数据格式的选择,作者推荐Avro,理由可参考原文。