- 高吞吐量:每秒10几万 - 高扩展性 - 持久性 - 容错性 - 高并发 - 为什么快? - 顺序写入磁盘,减少磁盘寻址 - 支持批量发送消息,积累到一定量再发送,减少网络开销 - 零拷贝,直接从磁盘发送到网络套接字 - 支持对消息压缩 - pull模型 - 消费者自己记录消费状态,每个消费者独立地顺序拉取分区数据 - 消费者可以按照任意顺序消费消息,可以重置到旧的偏移量处理之前的消息 - 支持消费者组,可以多个消费者通通消费一个topic - 如果没有数据,消费使会出传入一个时长参数timeout - 消费顺序 - 生产者发送消息到指定分区,通过自定义分区器实现,为消息指定相同的key - 消费者单线程消费同一分区 - 对消息进行编号或者添加时间戳 - 消息积压 - 增加消费者,但是不能超过分区数量 - 增加主题分区数量,重新平衡消费者 - **分区数决定了同组消费者个数的上限** - 高可用 - 多个broker组成一个集群 - 创建一个topic,然后划分为多个partitiion,各自存放一部分数据,放在不同的broker上面 - 消息确认机制 - ack=0,最不可靠,发送后无法知道是否到达broker - ack=1,等待leader确认消息,但是不等待副本的确认 - ack=-1,最可靠,等待所有副本同步完成才确认