kafka

简介

kafka用scala语言开发,分布式架构,用于集群应用消息生产与消费,依赖zookeeper管理offset等元数据

一台kafka服务器就是一个broker,一个集群由多个broker组成

一个broker可以容纳多个topic,同时一个非常大的topic可以分布在多个broker上

一个topic可以分成多个partition,每个partition是一个有序队列

支持topic对消息进行分类,使用group来区分不同应用访问同一个topic,不同group记录不同的offset,避免互相影响

2种模式

1、发布/订阅模式,数据生产之后,推给所有订阅者

2、点对点模式,消费者主动拉取数据

2种存储策略

1、基于时间,log.retention.hours=168

2、基于大小,log.retention.bytes=1000000000

优点

1、解耦

消息生产者只负责生产消息,消费者负责消费,支持多个生产者、消费者,消费者生产者不必同步工作

2、冗余

同一个分区可能存在多个副本,实现数据冗余,尽量保证数据不丢失

3、易扩展

消息写入文件,存储在磁盘,对cpu和内存消耗较小,易于横向扩展

4、峰值处理

实现消息生产消费缓冲,生产者分批发送消息,减少网络开销,消费者按照消费能力进行消费,避免消费过载

5、可恢复性

消费者断线会根据上一次记录,在zookeeper中的offset去接着获取数据,默认1分钟更新一次offset

6、吞吐量高

每条消息顺序写入分区日志,效率比随机写内存高

7、高并发

以分区为单位进行读写,提高并发

缺点

1、消息分批发送,并非真正实时

2、不支持mqtt协议,不支持物联网传感设备直接接入

3、同一分区内消息有序,无法实现全局消息有序

4、依赖zookeeper管理offset等元数据

kafka与mqtt

应用场景

mqtt:物联网,汽车设备,遥感数据

kafka:消息队列,行为跟踪,日志收集

主题对比

mqtt:支持层级主题,主题筛选,允许通配符订阅主题

kafka:支持topic对消息进行分类,支持多种模式的消息(schema)

服务质量

mqtt:3种级别,0消息可能会丢,但不会重复,1消息绝不会丢,可能会重复,2每天消息肯定会被传输一次,且仅传输一次

kafka:1消息绝不会丢,但可能会重复

存储方式

mqtt:内存、redis、mongdb

kafka:磁盘

kafka与rabbitMQ、rocketMQ

rabbitMQ:

erlang语言开发,实现了AMQP(高级消息队列协议)

可靠性高,实时性高,有消息的确认机制

支持topic优先级,支持消息全局有序,支持MQTT协议

支持消费者推模式,不支持消息回溯

kafka:

吞吐量大,消息可能会重复

rocketMQ:

阿里开源,java语言开发,分布式架构

可靠性高,稳定性好,支持10亿级别消息堆积

浙ICP备11005866号-12