Kafka 在分布式系统中八个使用场景

Kafka 最初是为大规模日志处理而构建的。它会保留消息直到过期,并允许消费者以自己的速度拉取消息。与其前身不同,Kafka 不仅仅是一个消息队列,它是一个适用于各种情况的开源事件流平台。让我们回顾一下流行的 Kafka 使用案例。

1. 日志处理和分析

  • 下图显示了一个典型的 ELK(Elastic-Logstash-Kibana)堆栈。Kafka高效地收集来自每个实例的日志流。
  • ElasticSearch 从 Kafka 消耗日志并对其进行索引。Kibana 在 ElasticSearch 之上提供了搜索和可视化界面。

1*kTAkXkIs0mD7zrkuZA7Ocg.png

2. 推荐中的数据流

  • 像亚马逊这样的电子商务网站使用过去的行为和类似的用户来计算产品推荐。
  • 下图显示了推荐系统的工作原理。Kafka 会流式传输原始的点击流数据,Flink 对其进行处理,模型训练从数据湖中消耗聚合数据。
  • 这允许不断改进每个用户的推荐相关性。另一个伟大的 Kafka 使用案例是实时点击流分析。

1*3luo79062OAw-yPYMnSTjQ.png

3. 系统监控和警报

  • 与日志分析系统类似,我们需要收集用于监控和故障排除的系统度量信息。
  • 不同之处在于度量数据是结构化数据,而日志是非结构化文本。度量数据被发送到 Kafka 并在 Flink 中进行聚合。聚合后的数据被实时监控仪表板和警报系统(例如 PagerDuty)消耗。

1*1JdHcMKoYmk17tspT76zTg.png

4. CDC(变更数据捕获)

  • 变更数据捕获(CDC)将数据库更改流式传输到其他系统以进行复制或缓存/索引更新。
  • Kafka 也是构建数据管道的强大工具,这意味着您可以使用它从各种来源摄取数据,应用处理规则,并将数据存储在数据仓库、数据湖或数据网格中。
  • 例如,在下图中,交易日志被发送到 Kafka,并由 ElasticSearch、Redis 和辅助数据库摄取。

1*GeYyb7RDExgEjom9DyC5UA.png

5. 系统迁移

  • 升级旧服务具有挑战性 —— 旧的编程语言、复杂的逻辑和缺乏测试。我们可以通过利用消息中间件来减轻风险。
  • 在下图中,为了升级下图中的订单服务,我们更新了传统的订单服务以消耗 Kafka 的输入并将结果写入 ORDER 主题。新订单服务消耗相同的输入并将结果写入 ORDERNEW 主题。
  • 对账服务比较 ORDER 和 ORDERNEW。如果它们相同,新服务会通过测试。

1*A-ZEA4YCeZT5Mpk5VkeZwg.png

6. 事件溯源

  • 如果将事件作为系统中的第一类公民(即,真实来源)来处理,那么存储应用程序状态就是一系列事件,系统中的其他所有内容都可以从这些持久且不可变的事件中重新计算。
  • 事件溯源就是关于以事件序列捕获状态更改。公司通常将 Kafka 作为他们的主要事件存储。在出现任何故障、回滚或需要重建状态的情况下,您只需随时重新应用来自 Kafka 的事件。

7. 消息传递

  • Kafka 最好且最常见的用例之一是作为消息队列。Kafka 为您提供了一个可靠且可扩展的消息队列,可以处理大量数据。
  • 我们可以将消息组织成“主题”,这意味着您将每条消息发布到一个特定的主题,而在另一侧,消费者将订阅一个或多个主题,并从中消费消息。
  • 微服务之间解耦通信的最大优势在于,您可以随时将新服务添加到这些事件中,而不会增加系统的复杂性或不得不更改任何源代码。

8. 提交日志

  • Kafka 可以作为分布式系统的一种外部提交日志。这个日志有助于在节点之间复制数据,并充当了失败节点恢复其数据的重新同步机制。
  • Kafka 中的日志压缩功能有助于支持此用途。

别忘了点击“掌声”和“关注”按钮,帮助我撰写更多类似的文章。

参考文献

请我吃🍗