MQ选择

一、Kafka
1、消息队列如何保证消息可靠性
- 消息不重复 - 生产者控制
- 消费者幂等
 
- 消息不丢失 - 生产者发送,要确认broker收到并持久化
- broker确认消费者消费完,再删除消息
 
2、kafka是什么
- Kafka是一种高吞吐量、分布式、基于发布/订阅的消息中间件,是Apache的开源项目。
- broker: Kafka服务器,负责消息存储和转发
- topic:消息类别,Kafka按照topic来分类消息
- partition: topic的分区,一个topic可以包含多个partition, topic 消息保存在各个partition上。offset:消息在日志中的位置,可以理解是消息在partition上的偏移量,代表该消息的唯一序号
- Producer:消息生产者
- Consumer:消息消费者
- Consumer Group:消费者分组,每个Consumer必须属于一个group
- Zookeeper:保存着集群 broker、 topic、 partition等数据;另外,还负责broker故障发现, partition leader选举,负载均衡等功能
3、kafka的架构
-  Producers(生产者):生产者将数据PUSH给broker 
-  Consumers(消费者):因为Kafka代理是无状态的,这意味着消费者必须通过使用分区偏移来维护已经消耗了多少消息。消费者向broker拉取消息 
-  Broker(代理):一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 
-  Topic :可以理解为一个队列,一个 Topic 又分为一个或多个分区 
-  Consumer Group:这是 kafka 用来实现一个 topic 消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group 
-  ZooKeeper:用于管理和协调broker。 