消息队列
-
什么是消息队列,主要应用场景有哪些?
消息队列是一种用于在两个独立的应用程序或组件之间传递消息的中间件。消息队列支持发送者发送消息,接收者在接收到消息时进行处理。消息可以在两个组件之间异步传递,以减少等待时间。
常见的消息队列应用场景包括: 1. 异步处理:在接收到请求时,将请求写入消息队列,以便后台任务进行处理。 2. 分布式系统:在分布式系统中,消息队列可以用于在不同的服务之间进行通信。 3. 流量控制:在高流量系统中,消息队列可以用于缓解系统的压力,并限制请求的数量。 4. 故障转移:在分布式系统中,消息队列可以用于在故障时进行故障转移,以保证系统的稳定性。
-
Kafka的架构设计是怎样的,都有哪些模块?
生产者(Producers):向Kafka主题发布消息的客户端或应用程序。 主题(Topics):消息发布到的类别或分区。 代理(Brokers):在集群中管理和存储消息的服务器。 Zookeeper:管理Kafka集群配置的协调服务。 消费者(Consumers):订阅主题并处理消息的客户端或应用程序。 消费者组(Consumer Groups):属于同一组并并行处理消息的消费者。 分区(Partitions):主题中消息的物理分区。每个分区都存储在不同的代理上,以提供可扩展性和可靠性。 副本(Replicas):存储在多个代理上的分区副本,用于容错。
-
Kafka是如何保证消息的顺序性的?
Kafka通过为每个Topic建立单独的分区(Partition),并为每个分区维护一个有序的消息序列来保证消息的顺序性。在分区内部,消息的顺序性是由Kafka的内部机制来维护的,消息是按照其在分区中的位置进行存储的。这样,消息的顺序性就得到了保证,因为每个消息在分区内部的顺序是固定的。
-
Kafka是如何保证消息不丢失的?
- 数据同步副本
- 刷盘: 同步刷盘/异步刷盘
- 生产者投递确认消息+日志刷盘,消费者失败重试然后再提交
- kafka消费消费完之后是定时清除的,只要手动提交重试