Kafka(二)消息系统设计

文章目录

前言

当多个系统之间通过Kafka来解耦时,在系统设计初期,基本的要求都是相似的,只不过是消费消息时的业务逻辑可能不同。

本文以业务系统和邮件系统解耦作为示例。业务系统需要发送邮件时,不在自身服务器上发送邮件, 不通过RPC的方式调用邮件系统,而是通过将发送邮件需求以消息的形式发送到Kafka, 邮件系统通过从Kafka中消费消息来发送邮件。

通过这样的解耦有以下几点好处

  1. 由于业务系统不直接调用邮件系统,所以不会将压力给到邮件系统,避免两个系统因大量的请求响应而出现的系统不稳定问题
  2. Kafka的性能是非常出色的,所以对于业务系统的大量写入应该可以hold住。当然我司每天写入的数据量和头部互联网公司的每天的海量数据没法比
  3. 邮件系统可以根据实际情况来从容的消费消息,也有利于我们可以针对邮件系统服务器进行硬件、软件、JVM等精细化的调优

整体设计

  1. 业务系统向Kafka发送消息
  2. 消息系统从Kafka获取消息,执行消费逻辑
  3. 业务系统的消息被邮件系统消费之后还需要通知业务系统
  4. 确保消息不丢失
  5. 确保消息不重复消费
  6. Kafka的高可用、稳定性不在本文讨论范围之内

时序图

下列时序图使用mermaid绘制

如果看不清楚,使用点此查看高清图片

时序图解释

  1. 1 ~ 10步骤为核心流程
  2. 11 ~ 20步骤为可选流程, 如果存在回调消息,则还要回调

最后

整体大的细节就如时序图所示,后续将在具体编码中进行更详细的说明。 下一篇博文专注于业务系统生产者端逻辑的实现。

相关推荐
zmd-zk1 小时前
kafka命令的使用——主题命令(topic)
大数据·分布式·学习·kafka
飞天大拖把1 小时前
RabbitMQ
分布式·rabbitmq
shiming88791 小时前
RabbitMQ高级特性:TTL、死信队列与延迟队列
分布式·rabbitmq·ruby
人不走空2 小时前
【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
分布式·zookeeper·kafka
斑驳竹影2 小时前
Zookeeper实现分布式锁、Zookeeper实现配置中心
分布式·zookeeper·云原生
斯凯利.瑞恩3 小时前
RabbitMQ 消息队列
分布式·rabbitmq·ruby
一只爱撸猫的程序猿3 小时前
简单解决一个同城多活中的机房之间数据同步的问题
spring boot·mysql·kafka
深度学习真难4 小时前
docker启动kafka、zookeeper、kafdrop
docker·zookeeper·kafka
喜悦156 小时前
RabbitMQ
分布式·rabbitmq
Lostgreen6 小时前
SQL on Hadoop
数据库·hadoop·笔记·分布式·sql·学习