kafka用scala语言开发,分布式架构,用于集群应用消息生产与消费,依赖zookeeper管理offset等元数据
一台kafka服务器就是一个broker,一个集群由多个broker组成
一个broker可以容纳多个topic,同时一个非常大的topic可以分布在多个broker上
一个topic可以分成多个partition,每个partition是一个有序队列
支持topic对消息进行分类,使用group来区分不同应用访问同一个topic,不同group记录不同的offset,避免互相影响
1、发布/订阅模式,数据生产之后,推给所有订阅者
2、点对点模式,消费者主动拉取数据
1、基于时间,log.retention.hours=168
2、基于大小,log.retention.bytes=1000000000
消息生产者只负责生产消息,消费者负责消费,支持多个生产者、消费者,消费者生产者不必同步工作
同一个分区可能存在多个副本,实现数据冗余,尽量保证数据不丢失
消息写入文件,存储在磁盘,对cpu和内存消耗较小,易于横向扩展
实现消息生产消费缓冲,生产者分批发送消息,减少网络开销,消费者按照消费能力进行消费,避免消费过载
消费者断线会根据上一次记录,在zookeeper中的offset去接着获取数据,默认1分钟更新一次offset
每条消息顺序写入分区日志,效率比随机写内存高
以分区为单位进行读写,提高并发
1、消息分批发送,并非真正实时
2、不支持mqtt协议,不支持物联网传感设备直接接入
3、同一分区内消息有序,无法实现全局消息有序
4、依赖zookeeper管理offset等元数据
mqtt:物联网,汽车设备,遥感数据
kafka:消息队列,行为跟踪,日志收集
mqtt:支持层级主题,主题筛选,允许通配符订阅主题
kafka:支持topic对消息进行分类,支持多种模式的消息(schema)
mqtt:3种级别,0消息可能会丢,但不会重复,1消息绝不会丢,可能会重复,2每天消息肯定会被传输一次,且仅传输一次
kafka:1消息绝不会丢,但可能会重复
mqtt:内存、redis、mongdb
kafka:磁盘
rabbitMQ:
erlang语言开发,实现了AMQP(高级消息队列协议)
可靠性高,实时性高,有消息的确认机制
支持topic优先级,支持消息全局有序,支持MQTT协议
支持消费者推模式,不支持消息回溯
kafka:
吞吐量大,消息可能会重复
rocketMQ:
阿里开源,java语言开发,分布式架构
可靠性高,稳定性好,支持10亿级别消息堆积
Copyright ©2010-2022 比特日记 All Rights Reserved.