MQ介绍:
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回,不论后续是否处理成功,都是告诉用户请求成功。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。
-
异步处理:是指在发送消息时,消费者将消息的发送给MQ,MQ发送消息给生产者分别异步执行,以减少阻塞和等待时间。消息的发送和接收通常由两个不同的线程或进程执行,避免阻塞和等待时间,提高系统的响应速度。
-
应用解耦:在传统的系统中,组件之间的通信通常需要依赖接口或直接调用,这会导致组件之间的耦合度较高,难以扩展和维护。而使用MQ,可以将组件之间的通信抽象为消息的发送和接收,使得组件之间的依赖关系变得更加简单和抽象。
-
流量削峰:流量削峰就是字面意思。面对在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
-
日志处理:日志相对于业务需求就没有那么重要可以交给MQ在流量较小时慢慢处理。
-
用户行为:用户的搜索、点赞、评论、收藏等行为都会涉及到MQ的使用
Kafka
Kafka是一种高吞吐量的分布式消息系统,它主要用于处理大量数据和实时流数据。以下是Kafka的优点和应用场景:
-
高吞吐量:Kafka具有高吞吐量的特点,可以处理大量的数据和消息。
-
分布式的消息系统:Kafka是一个分布式的消息系统,可以分布在多个节点上,并且可以水平扩展。
-
消息持久化:Kafka的消息可以持久化存储,即使在节点故障或系统崩溃的情况下,也可以恢复数据。
-
消息持久化:Kafka的消息可以持久化存储,即使在节点故障或系统崩溃的情况下,也可以恢复数据。
-
消息可靠性:Kafka通过消息的持久化和复制机制,确保了消息的可靠性。
-
实时性:Kafka适合处理实时数据,它能够快速响应事件,提供实时性。
存在以下场景可以优先使用Kafka:
-
大数据流处理:Kafka适用于处理大数据的实时流数据,如搜索引擎、广告、社交网络等。
-
分布式日志:Kafka适用于记录应用程序的日志信息,以便于监控和故障排除。
-
实时消息传递:Kafka适用于实时消息传递,如实时聊天、实时通知等。
-
分布式协调:Kafka适用于分布式协调和分布式同步等场景。
Kafka的基本架构
一个典型的 Kafka 体系架构包括若干 Producer、若干 Broker、若干 Consumer,以及一个ZooKeeper集群,如下图所示。其中ZooKeeper是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘中,而Consumer负责从Broker订阅并消费消息。
-
Producer:生产者,也就是发送消息的一方。生产者负责创建消息,然后将其投递到Kafka中。
-
Consumer:消费者,也就是接收消息的一方。消费者连接到Kafka上并接收消息,进而进行相应的业务逻辑处理。
-
Consumer Group (CG):消费者组,是多个consumer实例组成的逻辑单元,它们订阅同一个主题并消费其中的分区。消费者组中的消费者实例可以协同工作以实现负载均衡和故障转移。消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组逻辑上是一个订阅者。
-
Topic:主题,Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到Kafka集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。
-
Partitions:分区,Kafka将消息存储在分区中,每个分区都是一个独立的逻辑单元,可以在多个节点上独立处理。
-
Partition Keys:分区键,分区键是用于将消息分配到不同分区的标识符。通常使用主题(Topics)作为分区键,以便将消息发送到特定的分区。
-
Offsets:偏移量,偏移量是消费者实例在特定分区中已经消费的消息数量和位置信息。消费者实例需要定期提交偏移量以指示它们已经消费的消息位置,以便后续重新启动时能够从正确的位置继续消费。
总结
Kafka的应用场景非常广泛,除了实时数据处理之外,还包括日志收集、消息传递、实时数据存储等。Kafka的高吞吐量、高可用性、可扩展性等特点使其成为一种非常适合大规模数据处理和实时数据流的解决方案。