消息中间件的共性优势
- 异步处理
场景说明:⽤户注册后,需要发注册邮件和注册短信。
- 解耦
场景说明:⽤户下单后,订单系统需要通知库存系统
- 流量削峰
应⽤场景:秒杀活动,⼀般会因为流量过⼤,导致流量暴增,应⽤挂掉。为解决这个问题,⼀般需要在应⽤前端加⼊消息队列。
- 消息队列的其他用处
冗余
消息队列把数据进⾏持久化直到它们已经被完全处理,通过这⼀⽅式规避了数据丢失⻛险。许多消 息队列所采⽤的"插⼊-获取-删除"范式中,在把⼀个消息从队列中删除之前,需要你的处理系统明确的 指出该消息已经被处理完毕,从⽽确保你的数据被安全的保存直到你使⽤完毕。
扩展性
因为消息队列解耦了你的处理过程,所以增⼤消息⼊队和处理的频率是很容易的,只要另外增加处 理过程即可。
灵活性 & 峰值处理能⼒
在访问量剧增的情况下,应⽤仍然需要继续发挥作⽤,但是这样的突发流量并不常⻅。如果为以能 处理这类峰值访问为标准来投⼊资源随时待命⽆疑是巨⼤的浪费。使⽤消息队列能够使关键组件顶住突 发的访问压⼒,⽽不会因为突发的超负荷的请求⽽完全崩溃。
可恢复性
系统的⼀部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使⼀个 处理消息的进程挂掉,加⼊队列中的消息仍然可以在系统恢复后被处理。
顺序保证
在⼤多使⽤场景下,数据处理的顺序都很重要。⼤部分消息队列本来就是排序的,并且能保证数据 会按照特定的顺序来处理。(Kafka 保证⼀个 Partition 内的消息的有序性)
缓冲
有助于控制和优化数据流经过系统的速度,解决⽣产消息和消费消息的处理速度不⼀致的情况。
kafka简介
Apache Kafka是⼀个快速、可扩展的、⾼吞吐的、可容错的分布式“发布-订阅”消息系统,使⽤ Scala与Java语⾔编写,能够将消息从⼀个端点传递到另⼀个端点,较之传统的消息中间件(例如 ActiveMQ、RabbitMQ),Kafka具有⾼吞吐量、内置分区、⽀持消息副本和⾼容错的特性,⾮常适合 ⼤规模消息处理应⽤程序,主要应⽤于⼤数据实时处理领域。
Kafka官⽹: kafka.apache.org/
Kafka特性
- ⾼吞吐、低延迟
kakfa 最⼤的特点就是收发消息⾮常快,kafka 每秒可以处理⼏⼗万条消息,它的最低延迟只有⼏ 毫秒。
- ⾼伸缩性
每个主题(topic) 包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中。
- 持久性、可靠性
Kafka 能够允许数据的持久化存储,消息被持久化到磁盘,并⽀持数据备份防⽌数据丢失。
- 容错性
允许集群中的节点失败,某个节点宕机,Kafka 集群能够正常⼯作。
- ⾼并发
⽀持数千个客户端同时读写
应⽤场景
- 消息系统Messaging
- Web站点活动追踪Website Activity Tracking
- 数据监控Metrics
- ⽇志聚合Log Aggregation
- 流处理Stream Processiong
- 事件源Event Sourcing
- 提交⽇志Commit Log