消息传递模式简介:
一个消息系统负责将数据从一个应用程序传递到另外一个应用程序中,应用程序只关注数据,无需关注数据在多个应用之间是如何传递的。
分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。
消息传递有两种模式,分别是点对点消息传递模式和发布订阅消息传递模式。
1. 点对点消息传递模式:
点对点消息传递模式结构中,消息是通过一个虚拟通道(队列)进行传输的,生产者发送一条数据,消息将持久化到一个队列中,此时将有一个或多个消费者会消费队列中数据,但是一条消息只能被消费一次,且消费后的消息会从消息队列中删除,因此,即使有多个消费者同时消费数据,只会有一个消费者消费成功,数据都可以被有序处理。
2. 发布订阅消息传递模式:
在发布订阅模式中,发布者用于发布消息,订阅者用于订阅消息, 可以有多个不同的订阅者,发布者发布的消息会被持久化到一个主题中,这与点对点模式不同的是,订阅者可订阅一个或多个主题,订阅者可读取该主题中所有数据,同一条数据可被多个订阅者消费,数据被消费后也不会立即删除。
Kafka 简介:
Kafka是由Apache软件基金会开发的一个开源流处理平台,它由Scala和Java语言编写,是一个基于Zookeeper系统的分布式发布订阅消息系统,它与Apache Storm和Spark可以非常好地集成,用于实时流式数据分析。
Kafka能够在离线和实时两种大数据计算架构中处理数据。
Kafka的特性:
(1)解耦:只要生产者和消费者遵循接口约束,就可以修改或扩展数据处理的业务过程。
(2)扩展性:无需停机,用户可以向集群添删新的Kafka服务器。
(3)分布式:日志的分区partition(分布)在Kafka集群的服务器上。
(4)持久性:Kafka使用分布式提交日志,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的。
(5)容错性:Kafka会将消息数据备份到多个服务器节点中。
(5)性能:Kafka对于发布和订阅消息都具有高吞吐量、低延迟。 即使存储了许多TB的消息,它也保持稳定的性能。
(6)支持多种客户端语言
Kafka架构:
Kafka核心组件:
同一消费组的不同消费者只能获取唯一的主题,不可获得同一主题,不同消费组的不同消费者可获得同一主题.
Kafka核心组件介绍:
6.2 Kafka工作原理:
Kafka工作流程分析:
1. 生产者生产消息过程:
生产者向Kafka集群中生产消息。Producer是消息的生产者,通常情况下,消息源可是服务器日志、业务数据及Web服务数据等,生产者采用推送的方式将数据消息发布到Kafka的主题中,主题本质就是一个目录,而主题是由Partition Logs(分区日志)组成,每条消息都被追加到分区中。
- Producer先从Zookeeper中找到该Partition的Leader。
- Producer将生产的数据消息发送给Leader。
- Leader负责将消息写入本地分区Log文件中。
- Follower从Leader中读取消息,完成备份操作。
- Follower写入本地Log文件后,会向Leader发送Ack,每次发送消息都会有一个确认反馈机制,以确保消息正常送达。
- Leader收到所有Follower发送的Ack后,向Producer发送Ack,生产消息完成。
2. 消费者消费消息过程
Kafka采用拉取模型,由消费者记录消费状态,根据主题、Zookeeper集群地址和要消费消息的偏移量,每个消费者互相独立地按顺序读取每个分区的消息,消费者消费消息的流程图如下所示。