Apache Kafka
消息中间件->流式数据处理平台
特点: 高可靠性(分布式、分区、复制和容错)、高吞吐量、持久化
消息模式:
1)队列式(或点对点):在点对点消息系统中,消息被保存在队列中,一个或者多个消费者可以消费队列中的消息,但是特定消息只能由最多一个消费者消费,一旦消费者读取队列中的消息,它就从队列中消失;
2)发布-订阅:在发布-订阅的消息系统中,消息被保存在主题中,与点对点的消息系统不同的是消费者可以订阅一个或者多个主题并使用该主题中的所有消息,多个消费者可以订阅同一个主题中的消息
kafka为这两种消费模型设置了统一的消费者抽象模型,消费者组,消费者使用一个消费者组名标记自己,Topic上的一条消息只能由消费者组中的一个成员消费者组消费,假设消费某一个Topic的消费者都属于同一个消费者组,这就是队列式消费模型,相反如果所有的消费者不在同一个消费者分组中即是分布-订阅的消息模型。Kafka虽然在服务端保证消息的有序性但是不保证消息并行消费下的全局有序性,因为消息是异步发送给各个消费者,消费者接受消息的先后顺序无法保证,如果只让一个消费者处理消息有违背并行处理的初衷也极大降低了性能,故kafka在兼顾性能与消息有序性的基础上做了折衷,kafka采用了分而治之的策略-分区,并且保证Topic分区中的消息只能由唯一一个消费者进行处理,这样在牺牲跨分区消息处理顺序的基础上,保证了Topic一个分区的处理顺序,RocketMQ保证全局有序和局部有序应该也是借鉴了Kafka的实现机制