分布式消息中间件Kafka

以下为网易云课堂微专业Java高级开发的笔记以及自己的体会。

分布式消息中间件Kafka_第1张图片

 消息中间件的本质:一种具备接受请求、保存数据、发送数据等功能的网络应用。

5大核心组成协议、持久化机制、消息分发机制、高可用设计、高可靠设计。

分布式消息中间件Kafka_第2张图片

举例:RocketMQ 支持的Openmessaging协议:解析快,有事务设计、持久化设计

Kafka协议:结构简单、解析快、无事务设计、有持久化设计

Kafka

顺序读取数据到磁盘,效率比较好。可以动态扩容。

Kafka集群依赖于zookeeper来保证系统可用性,为集群保存一些meta信息。

Kafka核心API

分布式消息中间件Kafka_第3张图片

对于每个topic,kafka集群都会维护一个分区日志

consumer的读取partition的offset在1.x之前的版本存放在zookeeper,但是zookeeper的写操作性能很差,2.X版本之后offset的信息存放在consumer中,谁用谁存储。zookeeper仅仅存放该consumer最后一次的offset,减轻了zookeeper的压力。

Kafka核心概念

partition

topic-partition-message三层结构来表示消息。每个分区有一个leader,0或多个follower。

leader处理此分区的所有读写请求,follower被动的复制数据【虽然被动复制数据,但是consumer可以主动从副本上pull到数据,减轻了从leader的读取压力 98:00】。

producer

生产者往某个topic上发布消息,也负责选择发不到topic上哪个partition【1. 从分区列表轮流选择分区; 2. 按照权重选择分区】。由开发者负责如何选择分区的算法。

consumer

消费者使用消费组名称来进行标识,topic中的每条记录仅仅只能被同一个消费组中的一个消费者实例消费,但可以同时被不同消费组中的实例消费。

分布式消息中间件Kafka_第4张图片

新版本中只有producer不依赖于zookeeper,而topic和consumer都是依赖于zookeeper。

zookeeper实用场景(通过临时顺序节点可以实现分布式锁)

KafkaAPI

需要说明的是,旧版的Consumer分为高阶和低阶,高阶的入口类是ConsumerConnector,这种方式屏蔽了底层具体获取数据、设置、更新offset的过程,无法按照自己的业务场景选择处理方式。低阶的入口类是SimpleConsumer,可以自行给定分区、偏移量等属性。

高阶ConsumerAPI具体参考:https://www.cnblogs.com/liuming1992/p/6432626.html

低阶ConsumerAPI具体参考:http://www.cnblogs.com/liuming1992/p/6432506.html

 

新版本的API

 

 

 

 

你可能感兴趣的:(数据仓库)