Kafka学习总结

Kafka、zookeeper学习总结

一. kafka功能及实现原理

1.系统解耦,削峰填谷,异步处理提升性能,续力压测。

顺序消息:分区有序,1个分区,并且配置每次只发一个请求
广播消息:发布订阅
消息不丢:生产者不丢,重试,幂等,同步消息(同步复制),同步刷盘。
消费者不丢,消费点位手动提交,再平衡
消息不重:业务端来保证消息只生产一次或幂等。可以使用事物性保证多消息原子发送。读已提交,消费端幂等消费,手动控制消费点位。seek可以指定点位,实现任何地方存储消费点位。
消息重放:seek可以指定点位。
过滤:生产消费都有拦截器链
延时消息:不支持
事物消息:多消息原子提交,read-process-write两种场景。
客户端配读已提交。生产者从broker获取事务协调者,生成事务id,第一次发送消息时传给协调者。协调者将事务id,主题,分区记录在事务日志中,状态改为begin,发送消息,保存消费点位,预提交,提交将消息状态改为已提交。
使用场景,多消息原子提交,消费-处理-生产。
原理,二段提交原理 引入协调者,利用特殊主题事物日志文件持久化
从broker获取协调者,向协调者申请 ProducerID,epoch。
定时任务:时间轮,增加或删除任务o1复杂度,DelayQueue用来时间推移,多层时间轮,增大时间范围。
流量控制**:根据用户或者客户端或者二者组合限制broker的进出流量,一共8种组合。

二. 架构与工作流程

zookeeper:注册中心,管理broker与分区的关系
broker向zk注册/brokers/ids.
broker主题分区间的关系保存在zk,/brokers/topics/login/3->2。login主题3个broker,2分区。
消费者与分区关系保存在zk分区目录中/consumers/[group_id]/owners/[topic]/[broker_id-partition_id]
消费位点offset0.9之前保存在zk中,后来保存在consumer
consumer启动会去zk注册自己,目录是/consumers/[group_id]/ids/[consumer_id],并将订阅了哪些主题写到里面。消费者还需要关注消费者组中消费者数量变化,以便再均衡
/consumers/[group_id]/ids。还需要关注broker的变化,以便再均衡/broker/ids/[0-N]
生产者负载均衡2种
1.四层负载,一个broker对应一个生产者,缺点是不灵活。
2.zk做负载
消费者负载均衡:消费者组。

broker:持久化消息,两个内置主题,控制事物和消费位点。主从副本同步,副本日志分段,日志索引文件。一个主题涉及多个broker,多个分区,多个副本,副本因子决定副本数量。生产协调者,事物协调者
partition:分区,越多消费性能越高,单分区实现顺序消费,消息平均分配到各分区,每个分区对应多副本,增减分区会触发消息分配再平衡
replication:副本实现高可用,分段,顺序写,根据索引文件查找消息。
AR=ISR+OSR。ISR选主 LEO日志末端位移 HW高水位,最低的LEO

三. 功能实现原理

  1. 高可用:zookeeper集群,broker集群,多分区多副本机制,1主多从副本
  2. 高性能:多分区(多日志文件,分段),顺序写,页缓存,零拷贝,异步刷盘,异步消息(异步复制),批量发送和消费,netty

四. zookeeper

主要功能原理
适用于读多写少,因为从节点都保存全量数据再内存中。不适合存大量数据。
1. 集群选主策略:observer不参加投票,4种状态,leading,following,looking,observing
1启动投自己serviceId,zxid最大数据号,Epoch选举轮数,Server状态
2启动互相交换信息
3启动比1,2都大并且超过半数,成为leader。后边即使再大也不会改变
Leader。zxid大的是leader 如果相等serviceid大的是leader。
2. 二段提交
一阶段, 协调者向所有参与者发送proposal事务信息,参与者执行事务,反给协调者,协调者收到所有参与者成功执行信息。二阶段,向所有参与者发送提交请求,参与者执行提交返回结果,协调者收到所有成功,结束。
优点,简单,缺点,同步阻塞,单点问题。比如发起事务后 协调者挂了,事务参与者无法提交,此时参与者也挂一个,就无法回滚。
3. 三段提交,多了一步询问,降低参与者失效的几率。第一步失败,事务失败。第二第三步,参与者未能收到协调者信息,都自动执行。第二步只执行不提交。第三步提交。
4. 最终一致性保证,zab协议,恢复模式(选主,数据同步)和消息广播,leader负责写,向following同步
CAP C一致性 A 可用性 P分区容错。强、弱一致,最终一致,顺序一致
5. 分布式锁,zk创建持久节点,客户端向此节点注册顺序临时子节点,顺序靠前的获得锁,顺序靠后的监听前一个,形成一个有序监听队列
6. 监听通知,监听节点,通知一次失效,再监听。
7. 节点znode,持久,临时,持久有序,临时有序
8.PriorityQueue 按自然或comparator比较排序的无界队列。不可插入空或不可比较对象。
9.BlockingQueue 阻塞等待有货或者等待有空间,线程安全。
10.ArrayBlockingQueue 数组实现的有界阻塞队列,线程安全,公平非公平锁,只有一把锁。
11.LinkedBlockingQueue 链表实现的有界队列 Integer.Max,线程安全,入队出队两把锁分离,队列过长查询比较耗时。
12.SynchronousQueue 只能进一个元素被去出才能再进
13.LinkedTransferQueue 链表无界阻塞队列,tryTransfer看看有没有消费者,有就Transfer直接将元素传给消费者并等待消费后才返回。
14.LinkedBlockingDeque 两头都可入队出队,并发性能高一半。
15.DelayQueue,按延迟和到期时间进行比较排序的无界有序队列,最先到期的排在队首,过期才会出队列,offer新增,grow扩容,长度小于64扩容1倍+2,否则扩容50%。

五. kafka与rocketmq区别

注册中心不同,事务消息,事务性,是否读写分离,分区tag过滤,分区副本拦截器过滤,延迟消息,推拉消费或只拉,只支持Java,支持的队列多,kafka64,rtmq5w,消息重试,磁盘堆积内存堆积

六. RabbitMq

交换机与Queue绑定,一对多,消息发送到交换机,消息可以指定RoutingKey,也可以根据binding绑定关系决定消息发送到哪些queue.4种交换机,有忽略消息routingkey直接根据binding转发的,有根据routingkey与binding相比较后转发的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值