← 中文资源

简体中文版本

模式注册表

模式注册表把事件模式作为可寻址契约管理,按兼容模式拒绝破坏性变更,并在发布路径中强制执行。

阅读英文原文

模式就是契约

事件会被投影、服务和分析消费。如果生产者把 customer_id 改成 customerId,所有读取旧字段的消费者都会坏掉。注册表保存每个模式版本,并拒绝违反所选兼容模式的变更。

{
  "subject": "orders-value",
  "version": 3,
  "schema": "{\"type\":\"record\",\"name\":\"Order\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"total\",\"type\":\"long\"}]}",
  "compatibility": "BACKWARD"
}

具体负载取决于注册表和序列化格式。核心思想是使用有版本、可寻址的模式,而不是藏在每个生产者内部的隐式结构。

兼容模式

向后兼容意味着新消费者能读旧数据;向前兼容意味着旧消费者能读新数据;完全兼容要求两者。增量可选字段通常向后兼容;删除必填字段或改变类型则不行。按 subject 和部署时序选择模式,并用真实消费者测试生产者升级。

让 subject 有意义

一个 subject 应代表一种事件类型或一个 topic 的 value 模式。把无关事件混进同一 subject 会让兼容检查失去意义,并迫使消费者按结构分支。只有真正的新契约才需要新事件名;否则应在注册表规则下演进模式。

何时使用

当多个生产者和消费者独立演进,而事件破坏会导致静默数据丢失或停机时,使用注册表。优点是可强制、可发现的契约;代价是多一个服务、序列化开销和兼容评审纪律。与带模式示例的 wiki 页面相比,注册表在发布路径中执行契约。