实时数据流引擎Schematizer
原文链接
这是关于Yelp的实时流数据基础设施系列文章的第三篇。这个系列会深度讲解我们如何用“确保只有一次”的方式把MySQL数据库中的改动实时地以流的方式传输出去,我们如何自动跟踪表模式变化,如何处理和转换流,以及最终如何把这些数据存储到Redshift或Salesforce之类的数据仓库中去。这一篇主要介绍Schematizer,Yelp的模式存储服务。
1. 为什么不用Kafka
- 当接入上百个服务时,会有上千种不同模式的非阻塞消息传来传去
- Confluent Schema Registry和Kafka Connect都不错,但太晚发布
- 所以才有了Yelp Schematizer
2. Yelp Schematizer 是什么
- Yelp 认为数据必须模式化(Schema),而不是任意格式
- Schematizer 用于跟踪和管理所有“模式”(而不是数据)
- 并提供自动化文档支持等功能的模式存储服务
- Yelp 使用
Apache Avro
来表达模式,包括表示模式演进
- 消息在传递时,不带模式,只带模式的ID
这么看Avro在做模式序列化的过程中,自动实现了灾备存储
3. Yelp Schematizer 管理模式的方法
- 用数据产生信息分组模式,例如按库名表名分组
- 用数据的目的地信息分组,例如发到MySQL或
Redshift集群
分成不同组
- 以上两种方法都是必要的
4. Yelp Schematizer 和Apache Avro 的关系
- 任何数据生产者希望发送消息时,都要先去Schematizer 注册一个模式
- 注册Schematizer 模式最简单的方式,是注册一个Avro 模式
- 对无法注册Avro 模式的数据生产者,也可以向Schematizer 中加入模式转换器来生成Avro 模式,MySQL Streamer就是这个模式
- 使用类似流程时,如果数据生产者改变了模式定义,则需要重新注册模式
- Schematizer 中也可以定义自己的模式规则
- 注册模式的过程是
幂等
的,即相同的模式注册多次,则只有第一次是新注册,之后会返回已经注册的模式。这样在程序实现时,就统一全部写成新注册就好了,不要考虑“先查询-有就使用-没有再注册”这种小流程
5. 上游模式改变是否会影响下游服务?
- Schematizer 使用Avro Resolution Rules 解释规则来确认Topic 和新模式之间是否兼容:如果兼容就沿用旧模式,否则就注册新的模式
- Avro 来保证各种版本模式的打包和解包
- 不兼容的模式会自动生成和分配到不同的Topic
- 模式确实发生改变时,数据管道应该可以自动生成流水线化的模式迁移计划。但Schematizer 目前只支持Redshift的计划生成。
- Schematizer 知道所有数据生产者和消费者的信息,包括负责人和联系方式等。这在最初只是一种附带的通讯录实现,但后期发现有用后,则定义了单独的模式,并写到
Kafka Topic
中。
- Redshift 和
Splunk
可以单独处理Kafka Topic,就可以简单的实现一键发布最新通讯录功能了
- Kafka 生产者通常需要知道自己要使用哪个Topic,但Schematizer 定义了模式和Topic之间的关系,所以数据生产者只需要定义模式,就可以自动找到Topic 了
- 模式定义了数据,也同时定义了文档。这对数据消费者理解数据是必要的。
* 兼容性问题引起的崩溃是很多编程方法的硬伤,但PHP解决了这个问题
* 人工可读(PII,Personally Identifiable Information)数据和人工不可读(non-PII)数据必然分开存储。这样做一方面是考虑PII - non-PII之间转换是模式不兼容的会引起Schematizer 的大量开销,另一个方面考虑PII 的安全性问题(不应被不授权的下游消费者看到)
6. 知识挖掘器Watson
- Yelp Watson 是自行开发的Webapp,用来在大量文档中找到有用信息。其中使用
Whoosh Python包
实现了简单的搜索引擎功能。
- Yelp Watson 实际上是Schematizer 的一个可视化前端,通过Schematizer 的几个RESTful API 来获取数据
- Yelp Watson 也有一些附加功能,包括允许使用者为任何数据源打标签(称为Category),以便自行组织自己想要的数据和关联关系;包括允许使用者添加注释(称为Notes)
Whoosh Python包的优点是快速开发。`Elasticsearch`的优点是功能丰富。
7. SQLAlchemy模型
来为数据的数据源和模式整理文档
- SQLAlchemy 也有单独字段来记录模型的维护者和专家
- SQLAlchemy 被Yelp 设定为强制要求提供属性描述和文档
8. 特定应用转换器(Application Specific Transformer,AST)
- 实际是定制流程,按顺序执行,包括
- Model Doc Extractor component
- Column Doc Extractor component
- ID Transform component
- Bit Flag Field Transform component
- Enum Field Transform component
9. 流处理器Paastorm
-> 待续