分布式消息中间件Kafka

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

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

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

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

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

Kafka

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

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

Kafka核心API

对于每个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中的每条记录仅仅只能被同一个消费组中的一个消费者实例消费,但可以同时被不同消费组中的实例消费。

新版本中只有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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值