跳至主要內容
事件驱动架构:从理念到落地

前言

如果你写过 Spring Boot 项目,你大概率用过 @EventListener 或消息队列。但"用消息队列"和"事件驱动架构"是两回事。事件驱动架构(Event-Driven Architecture, EDA)是一种架构风格,不只是技术选型。

本文带你从"为什么需要事件驱动"开始,理解三种事件模式、Command vs Event 的本质区别,再到实战落地。


第一部分:什么是事件驱动架构

1.1 一个简单的对比

传统请求-响应模式(你每天都在写的):


郑天祺大约 14 分钟架构设计事件驱动EDAKafkaRocketMQ架构模式
Kafka 进阶:深入理解分区、事务与 exactly-once

Kafka 进阶:深入理解分区、事务与 exactly-once

前言

大多数开发者对 Kafka 的理解停留在"发消息、收消息"的层面。但当你遇到消息丢失、消息重复、消息乱序这些生产问题时,才是真正需要深入理解 Kafka 内部机制的时候。

本文从分区机制、ISR、幂等生产者、事务消息到 exactly-once 语义,带你逐层深入 Kafka 的核心原理。


第一部分:分区机制深入

1.1 Partition 是什么

Kafka Topic 被划分为多个 Partition(分区),每个 Partition 是一个有序的、不可变的消息序列


郑天祺大约 12 分钟消息队列Kafka分区事务exactly-onceISR
消息队列选型指南:从业务场景到技术决策

消息队列选型指南:从业务场景到技术决策

前言

"用哪个消息队列?"——这是每个架构师都必须回答的问题。答案是:看场景。Kafka 适合大数据,RocketMQ 适合金融交易,RabbitMQ 适合复杂路由,Pulsar 适合多租户。本文帮你建立选型决策框架。


第一部分:四大消息队列全景对比

1.1 核心特性对比

特性 Kafka RocketMQ RabbitMQ Pulsar
开发语言 Java/Scala Java Erlang Java
所属 Apache Apache(阿里) VMware Apache
协议 自有协议 自有协议 AMQP 0-9-1 自有协议
吞吐量 ★★★★★ ★★★★☆ ★★★☆☆ ★★★★★
低延迟 ★★★☆☆ ★★★★☆ ★★★★★ ★★★★☆
消息持久化 ★★★★★ ★★★★★ ★★★☆☆ ★★★★★
事务消息 ★★★★☆ ★★★★★ ★★★★☆ ★★★★★
顺序消息 ★★★☆☆ ★★★★★ ★★★☆☆ ★★★★☆
延迟消息 ★★★★★ ★★★☆☆ ★★★★☆
消息回溯 ★★★★★ ★★★★★ ★★★★★
运维复杂度 ★★★☆☆ ★★★☆☆ ★★☆☆☆ ★★★★☆

郑天祺大约 6 分钟消息队列消息队列选型KafkaRocketMQRabbitMQPulsar
kafka架构设计

1、应用场景

同时为发布和订阅提供高吞吐量、消息持久化、分布式功能、支持数据并行加载到Hadoop中

实际:
1、发布系统通知:如评论、点赞、关注这些事件发生后,可以把这些操作放入到kafka消息队列中,如果用户量一大直接操作数据库,服务器压力顶不住。所以把这些通知先存入kafka中,然后一个个消费掉。
2、一些项目数据同步问题也可以用到。
3、监测数据:分布式应用程序生成的统计数据集中聚合。
4、分布式:假设有系统B、C、D都需要系统A的数据
5、事件采集:其中状态的变化根据时间的顺序记录下来,kafka支持这种非常大的存储日志数据的场景。
如:日志收集、消息系统、活动追踪、运营指标、流式处理、热点点赞、评论、关注、发短信。


郑天祺大约 9 分钟分布式Kafka消息队列SpringBoot
Kafka的简单使用

1、安装kafka

http://kafka.apache.org/quickstart (linux版)

windows版:
首先cmd到kafka的bin下
其中启动内置的zk用:zookeeper-server-start.bat D:\environment\kafka_2.12-2.3.0\config\zookeeper.properties
启动Kafka用:kafka-server-start.bat D:\environment\kafka_2.12-2.3.0\config\server.properties


郑天祺大约 2 分钟分布式Kafka消息队列