常见的两种消息引擎范型
消息队列模型
基于队列提供消息的传输服务,提供了一种点对点的消息传递方式 (一个发送者对应一个接受者),一旦消息被消费就会从队列中移除,每条消息只能被一个消费者消费发布订阅模型
发布者将消息发送到topic中,订阅者订阅topic获取消息
kafka概述
kafka是一个多分区,多副本基于zookeeper协调的分布式消息系统,它以高吞吐,可持久化,可水平扩展的,支持数据流处理等多种特性而被广泛应用
kafka的使用场景
消息传输
日志收集
用户行为数据
监控性指标流失处理:0.10版本推出了流式处理组件kafka stream
kafka基础概念
producer:生产者
consumer:消费者
broker:服务代理节点,其实就是一个kafka服务节点
topic: 一类别的消息(逻辑)
partition:kafka的下级结构,为了提升吞吐量引入
replica:副本,为实现高可靠性使用冗余机制,kafka副本实现"一主多从"模式
offset:位移,每条消息对应一个位移的序列
message: 消息实体
consumer group:消费者组 (逻辑概念),多个消费者同属一个消费者组,那么消费者组的多个消费者共同消费topic,每个消费者消费一个或多个分区,一个分区只允许一个消费者消费
kafka的版本变迁
生产者和消费者新老版本对比
KfkaCounsumer新版本对比旧版本的优点
单线程设计,单个Cousumer线程管理多个分区的消费Socket连接,极大简化了实现
位移提交与保存交由kafka处理,不再保存到zookeeper,避免了zookeeper频繁读写的性能瓶颈
实现了一个集中式协调者(coordinator)的角色,所有消费者组成员管理交由coordinator负责,不再依赖于zookeeper,对于消费者组的管理更加可控
KafkaProducer新版本对比旧版本的有优势
发送过程划分为两个不同的线程:用户主线程和Sender IO线程,逻辑更容易控制
完全异步发送消息,并提供回调机制(callback),判断消息发送与否
批量发送:每个批次包含多个发送请求,提升吞吐量
更加合理的分区策略:对于没有指定key的消息,旧版本是默认某段时间发送到固定分区,新版采用轮询方式,消息发送更加均衡
底层统一使用java Selector的网络客户端,结合java的Future实现更加健壮的生命周期管理