Yelp的实时数据流引擎Schematizer

实时数据流引擎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 管理模式的方法

  1. 用数据产生信息分组模式,例如按库名表名分组
  2. 用数据的目的地信息分组,例如发到MySQL或Redshift集群分成不同组
  3. 以上两种方法都是必要的

4. Yelp Schematizer 和Apache Avro 的关系

  1. 任何数据生产者希望发送消息时,都要先去Schematizer 注册一个模式
  2. 注册Schematizer 模式最简单的方式,是注册一个Avro 模式
  3. 对无法注册Avro 模式的数据生产者,也可以向Schematizer 中加入模式转换器来生成Avro 模式,MySQL Streamer就是这个模式
  4. 使用类似流程时,如果数据生产者改变了模式定义,则需要重新注册模式
  5. Schematizer 中也可以定义自己的模式规则
  6. 注册模式的过程是幂等的,即相同的模式注册多次,则只有第一次是新注册,之后会返回已经注册的模式。这样在程序实现时,就统一全部写成新注册就好了,不要考虑“先查询-有就使用-没有再注册”这种小流程

5. 上游模式改变是否会影响下游服务?

  • Schematizer 使用Avro Resolution Rules 解释规则来确认Topic 和新模式之间是否兼容:如果兼容就沿用旧模式,否则就注册新的模式
  • Avro 来保证各种版本模式的打包和解包
  • 不兼容的模式会自动生成和分配到不同的Topic
  • 模式确实发生改变时,数据管道应该可以自动生成流水线化的模式迁移计划。但Schematizer 目前只支持Redshift的计划生成。
  • Schematizer 知道所有数据生产者和消费者的信息,包括负责人和联系方式等。这在最初只是一种附带的通讯录实现,但后期发现有用后,则定义了单独的模式,并写到Kafka Topic中。
  • Redshift 和Splunk 可以单独处理Kafka Topic,就可以简单的实现一键发布最新通讯录功能了
  • Kafka 生产者通常需要知道自己要使用哪个Topic,但Schematizer 定义了模式和Topic之间的关系,所以数据生产者只需要定义模式,就可以自动找到Topic 了
  • 模式定义了数据,也同时定义了文档。这对数据消费者理解数据是必要的。
image
* 兼容性问题引起的崩溃是很多编程方法的硬伤,但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)

  • 实际是定制流程,按顺序执行,包括
    1. Model Doc Extractor component
    2. Column Doc Extractor component
    3. ID Transform component
    4. Bit Flag Field Transform component
    5. Enum Field Transform component

9. 流处理器Paastorm -> 待续

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容