![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
中间件
学习学习
w-小菜
I thank you from the bottom of my heart.
展开
-
kafka源码---副本机制
副本(Replica),一个分区对应多个副本,那么一个topic有不同的分区,不同的多个副本。假如我们有3个副本,这就有1个leader,2个follower。leader负责写入,follower负责读取,同时它从leader处拉取消息保存到自己的log中。 一般情况下,我们认为一个分区的多个副本分布在不同的broker上,当leader所在的broker出现故障,那么就会从剩下的follower中重新选取一个作为Leader. 如果多个副本出现在了同一个Broker上,不仅不...原创 2020-06-30 21:06:28 · 288 阅读 · 0 评论 -
kafka源码---日志管理
1,基本概念 kafka使用日志保存生产者发送的message,每条消息都有一个offset值表示它在partition中的偏移量,offset类似于主键,唯一确定库中的一条记录。 一个topic对应多个partition,一个partition对应多个副本,无论是leader副本,还是follower都被分配到某个Broker上面,一个副本对应一个Log存放数据,避免log太大,又分成了log 分段保存数据。所以最终体现在磁盘上面的就是log分段。为了提高查询消息的效率,为每个...原创 2020-06-30 15:34:51 · 488 阅读 · 0 评论 -
kafka源码---server之网络层
网络层 客户端一般不会碰到大量连接请求,但是broker会遇到,因为它不止收到提供者/消费者的连接请求,还需要收到集群中其他broker的请求,所以对于服务端来说,面临的是高并发场景,客户端使用NetworkClient来管理连接就足够了,server是不行的,它采用reactor模式实现网络层。1.Reactor模式 reactor模式,基于事件驱动的模式,java...原创 2020-06-29 20:23:27 · 247 阅读 · 0 评论 -
kafka-主题&分区&日志
一,主题的管理 主题是消息的归类,分区是消息的第二次归类,每个分区可以有一个至多个副本,每个副本对应一个日志文件,每个日志文件对应一至多日志分段,每个日志分段细分为:索引文件,日志存储文件,快照文件。1.创建主题:当向broker发送未创建的topic的时候,如果broker设置了auto.create.topics.enable=ture。则broker会自动创建一个对应的分区=1,副本因子=1的topic。不推荐自动创建,因为这样会增加维护的难度,更加推荐的方式是:通过kafka-tipi..原创 2020-05-10 22:03:42 · 723 阅读 · 0 评论 -
kafka源码---消费者(3)
二,offset操作2.1 提交offset在消费者消费过程,以及rebalance操作之前,抖要提交一次offset记录consumer当前的消费位置。提交offset的功能也由ConsumerCoordinator实现我们在第一节中讲过,Consumer..Client的SubscriptionState字段,使用TopicPartitionState记录每个TopicPartition的消费情况,它的position字段则记录了消费者下次要从服务器获取消息的offset。他们形成了Con.原创 2020-06-29 10:48:28 · 1213 阅读 · 0 评论 -
kafka源码---消费者(2)
继续接着上一下消费者的知识点,本节我们将追踪消费者中最重要的rebalance代码和offset提交代码!一,rebalance首先,我们看看哪些情况会触发rebalance:1.有新的consumer 加入2.有consumer宕机,可能网络延迟,规定时间内没有进行heartbean3.有消费者主动退出 consumer gorup4.conmuser group订阅的topic出现 partition数量变化5.消费者调用unsubscrible() 取消对topic的订阅原创 2020-06-28 20:55:33 · 483 阅读 · 0 评论 -
kafka源码---消费者(1)
《kafka源码刨析》读书笔记一,概念1.offset 消费者如何确定自己消费到了分区的哪个位置?如果消费者宕机了,当下一个消费者来继续处理这个分区的时候,如何继续消费?都指向了消费位移的概念,也就是我们需要一个变量来保存消费位置。我们将这个变量称为 offset。 在旧版本中,消费者会把消费位置记录到zookeeper中,新版本为了缓解zookeeper的压力,在kafka服务端中添加了一个名为“_comsumer_offsets”的内部 topic,简称为offset topic,...原创 2020-06-26 11:01:55 · 552 阅读 · 0 评论 -
kafka源码---生产者(3)
生产者第二节:render threadSender线程,发送流程: 1.根据RecordAccumulator缓存情况,筛选出可以向哪些node节点发送消息。read()方法得到 2.根据生产者和节点的链接情况(由NewworkClient管理),过滤Node节点 3.生成相应的请求,每个Node节点,只生成一个请求。 4.调用NetWorkClient 将请求发送出去。一,Sen...原创 2020-06-24 17:36:36 · 341 阅读 · 0 评论 -
kafka源码---生产者(2)
四,RecordAccumulator3.1 整体结构 RecordAccumulator缓冲的结构:每一个分区对应一个双端队列deque,存放的单元是ProducerBatch,一个Batch中存放了多个Record,那么存消息是自动放到尾端,而读取消息(发送线程读取)是从头部开始的,目的是让发送的消息更加紧凑,节约空间,提高效率。注意这个大的缓冲池,默认是32M,如果超出了会阻塞send()方法,可以设置参数来调节这个大小。public final class RecordAccum..原创 2020-09-01 11:48:54 · 261 阅读 · 0 评论 -
kafka源码---生产者(1)
《深入了解kafka》学习笔记一,客户端开发 最开始kafka的客户端是由scala语言开发的,后来0.9之后升级成为了java开发的客户端,但是kafka是支持多语言的中间夹,所以还存在其他开发的客户端。 客户端的操作大概分为四步:1.创建配置信息;2.创建生产者(使用1中的配置信息)3.创造信息块(包含需要发送的信息和发送的地点);4.发送-关闭;public class kafkaProducerMy{public static final String ...原创 2020-05-10 13:47:27 · 448 阅读 · 0 评论 -
MySql---事务/锁
《mysql 技术内幕》 读书笔记一,认识事务 1.概述:事务可由一条非常简单的sql组成,也可以是复杂的sql组成。事务是访问并更新数据中数据的一个程序指向单元。它的特点就是全部完成,全部失败,构成这个特点要满足四个特性: 原子性:不可分割的工作单位 一致性:就是不破坏原本的规则,就是一致,比如主键是唯一的,你事务处理修改主键,主键最后变成了不唯一的,就打破了...原创 2020-04-27 17:28:51 · 156 阅读 · 0 评论 -
Redis---集群
二,集群 Redis集群是Redis提供的分布式数据库方案。1.节点 最开始各个节点都是独立的,要进行连接,使用cluster meet命令,+ ip +端口进行。A,B,C三个节点,A,向B发送,AB集群成立,A向C发送,ABC集群成立(这里就没有B-C的过程) 1.启动节点:判断配置文件中,是否开启了集群。开启了,就把自己设为一个节点,没有就是单机模式。 2.集群数据结构:clusterNode,保存一个点的当前状态,创建时间,名字,ip,端口号等等。它不仅记...原创 2020-08-28 16:40:30 · 144 阅读 · 0 评论 -
Redis---哨兵
二,Sentinel(哨兵) Redis高可用解决方案:又一个或者多个哨兵组成哨兵系统,监控服务系统,当主服务器下线,自动将其下的从服务器升级为主服务器(这里感觉哨兵就是一个管理者,但是权限不高)1.启动并初始化Sentinel 初始化服务器:Sentinel本质还是一个redis服务器,Sentinel的启动就不需要加载持久化数据了,简化得多, 使用Sentinel专用代码:将redis服务器启动的代码替换为Sentinel专用代码,(命令表中的命令都不相同了) ...原创 2020-08-28 15:07:20 · 139 阅读 · 0 评论 -
Redis---复制
《redis设计与实现》读书笔记一,复制 用户使用slaveof去复制一个服务器的时候,被复制的服务器称为主服务器,请求复制的称为从服务器。这两个服务器的数据状态一致, 这样有什么好处?对于插入,修改,删除来说要同时修改两个服务器的值,增加了消耗,但是对于get来说,就可以进行分流了。可以简介实现数据持久化,一个服务器挂了,另外一个还在。负载均衡:独写分离,主服务负责...原创 2020-04-27 16:25:15 · 171 阅读 · 0 评论 -
Redis---c/s端运行流程&事件
《Redis设计与实现》读书笔记 Redis是一个事件驱动程序(也就是,请求才会执行操作)那么主要产生的事件是什么呢?下面的两个。一,文件事件 服务器和客户端连接交互产生的事件,Redis基于Readcot模式开发了自己的网络事件处理器,这个和Netty里面的一样handler,然后IO使用多路复用IO,同时监听多个套接字,也就是连接,绑定事件处理器。 1....原创 2020-04-26 15:37:38 · 370 阅读 · 0 评论 -
Redis---数据库&持久化
《Redis设计与实现》读书笔记在Redis中,数据库概念是什么? 首先Redis服务器中所有的 [数据库] 都保存在redisServer结构的db数组中,db数组的每个项都是一个redisDb结果。所以我们就找到了数据库,它是一个结构(用java的话来说,就是一个类)struct redisServer{ //..... redisDb *db;/...原创 2020-04-26 15:34:49 · 316 阅读 · 0 评论 -
Redis---list
一,概念 list,列表,可以实现左进左出,右进右出,可以存在重复值,具有下标等特性。二,常用命令1.插入左进一个:lpush key value value value...底层执行过程是 a, b a , c b a 。所以最后输出的时候是c b a。左一次性进入多个: 与分别进入,是一个效果,只不过减少了命令发送次数。右进同理,但是它的顺序就不相同了。2.删除1.左出:直接弹出下标为0的元素:lpop key2.右出:弹出最后一个元素:...原创 2020-09-20 15:51:20 · 583 阅读 · 0 评论 -
Redis---五种键值对实现
《Redis设计与实现》读书笔记 在Redis中的五种键值对里面,没有一个是单独使用基本的数据结构实现的,而是基于这个数据结构创建了一个对象系统,这个系统包含了:字符串对象,列表对象,哈希对象,集合对象,有序集合对象。(也是就广义的Redis五种基本数据结构) Redis在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。使用对象的另外一个好处是,我们可以...原创 2020-04-26 15:30:36 · 4350 阅读 · 0 评论 -
Redis---底层数据结构
《Redis设计与实现》读书笔记 一.动态字符串 概念:redis没有直接使用C语言传统的字符串表示,而是自己构建了一种简单动态字符串的抽象类型(SDS),并且将SDS用作redis的默认字符串。而C语言自带的字符串只被redis用来当常量使用(就是不需要修改字符串值的情况下使用,如果字符串的值需要修改,就使用SDS)。SDS甚至要用来实现缓冲区buffer,AOF模块...原创 2020-04-25 11:25:42 · 179 阅读 · 0 评论