- 博客(596)
- 资源 (14)
- 收藏
- 关注
原创 Kafka Broker是如何基于Reactor模式来处理海量用户请求的?
参数名描述默认值broker全局唯一的请求队列,用来保存请求500用来处理请求的线程数8。
2023-04-29 14:04:46
43
原创 Kafka Controller 扮演了一个什么样的角色?
controller有哪些作用?集群管理,管理集群中的各个broker,包括broker的上下线,broker的状态变化,partition的副本分配和迁移,leader选举,kafka controller参与leader选举,当某个partition的leader出现故障时,controller会协调其他副本参与leader选举,选举一个新的leader来继续服务,保证了集群的高可用topic管理,管理topic的创建,修改和删除操作,同时也负责对topic的分区数和副本数等参数进行调节。
2023-04-29 12:34:45
24
原创 Kafka调优
至少一次(At Least Once)= ack级别设置为-1+分区副本大于等于2+ISR里应答的最小副本数量大于等于2。生产者如何提高吞吐量。
2023-04-29 11:23:01
802
原创 Kafka Leader Broker 宕机后如何保证高可用?
名词介绍AR分区中的所有副本ISR与 leader 保持同步状态的副本合集,LEO每个分区中最后一条消息的下一个位置HWISR中最小的LEO即为HW,俗称高水位,消费者只能拉取到HW之前的消息。
2023-04-17 22:53:41
31
原创 Kafka Broker是如何保存消息的?
创建topic 副本数为3 分区数位3 ./kafka-topics.sh --create --zookeeper s1:2181 --replication-factor 3 --partitions 3 --topic test # 创建topic 副本数为1 分区数位3 ./kafka-topics.sh --create --zookeeper s1:2181 --replication-factor 1 --partitions 3 --topic orders1s2s3。
2023-04-17 22:08:51
25
原创 Kafka Consumer 启动流程
Coordinator有什么作用?每个 Consumer Group 都会选择要一个 Broker 作为 Coordinator,负责监控消费组里各个消费者的心跳,以及判断是否宕机,开启rebalance如何确定Coordinator。
2023-04-16 19:22:16
52
原创 Kafka消息发送流程
参数名描述默认值格式为host1:port1,host2:port2,…retries0acks可选值为[all, -1, 0, 1]1batch.sizebatch的大小,默认为16kb,如果batch太小,会导致频繁网络请求,吞吐量下降,如果batch太大,会导致一条消息需要等待很久才能被发送出去16klinger.ms超过linger.ms指定的时间,batch还没满,也会被发送出去,避免消息的延迟太长0限制发送出去的消息大小1m。
2023-04-16 18:21:05
387
原创 Kafka消息消费流程
[0]https://learn.lianglianglee.com/%E4%B8%93%E6%A0%8F/Kafka%E6%A0%B8%E5%BF%83%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%AE%9E%E6%88%98/18%20%20Kafka%E4%B8%AD%E4%BD%8D%E7%A7%BB%E6%8F%90%E4%BA%A4%E9%82%A3%E4%BA%9B%E4%BA%8B%E5%84%BF.md[1]https://juejin.cn/post/686482881
2023-04-08 16:43:52
48
原创 并发工具类:线程池execute和submit有什么区别
使用工具类创建线程池上一节我们已经自己实现了一个线程池,本节我们看看JDK提供的线程池是如何实现的?public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, .
2022-04-09 14:34:25
1209
1
原创 并发工具类:Future获取异步执行结果
有了Runnable为什么要搞个Callable?public void run() { // 状态不是 NEW 说明任务没被执行过,或者已经被取消 if (state != NEW || !UNSAFE.compareAndSwapObject(this, runnerOffset, null, Thread.currentThread())) return; try { .
2022-04-08 22:20:37
1100
原创 并发容器:HashMap(JDK1.8)
JDK1.8源码构造函数public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); if (initialCap.
2022-04-07 17:04:11
1467
原创 并发容器:ConcurrentHashMap(JDK1.8)
JDK1.8源码构造函数public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel) { if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0) throw new IllegalArgumentExceptio.
2022-04-07 17:00:44
987
原创 MySQL实战:为什么选择这个执行计划?(optimizer trace)
CREATE TABLE `demo_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `idx_val` (`val`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into demo_table (val, name.
2022-03-30 22:59:52
485
原创 MySQL实战:数据是如何进行存储和查询的?
MySQL数据存储和查询流程这些数据最终会持久化到文件中,那么这些数据在文件中是如何组织的?难道是一行一行追加到文件中的?其实并不是,数据其实是存到页中的,一页的大小为16k,一个表由很多页组成,这些页组成了B+树页:页是innodb磁盘管理的基本单位,innodb每个页的大小为16k区:由64个连续的页组成,每个页的大小为16kb,即每个区大约为1MB段:常见的段有数据段(B+树页节点),索引段(B+树非页节点),回滚段等参考博客...
2022-03-26 14:44:06
1096
原创 MySQL实战:锁
并发场景最近做了一些分布式事务的项目,对事务的隔离性有了更深的认识,后续写文章聊分布式事务。今天就复盘一下单机事务的隔离性是如何实现的?隔离的本质就是控制并发,如果SQL语句就是串行执行的。那么数据库的四大特性中就不会有隔离性这个概念了,也就不会有脏读,不可重复读,幻读等各种问题了对数据库的各种并发操作,只有如下四种,写写,读读,读写和写读写-写事务A更新一条记录的时候,事务B能同时更新同一条记录吗?答案肯定是不能的,不然就会造成脏写问题,那如何避免脏写呢?答案就是加锁读-读MySQL读操.
2022-03-25 19:37:36
1768
1
原创 MySQL实战:MVCC是如何实现的?
MVCC有啥作用?对于使用InnoDB存储引擎的表来说,聚集索引记录中都包含下面2个必要的隐藏列trx_id:一个事务每次对某条聚集索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列roll_pointer:每次对某条聚集索引记录进行改动时,都会把旧的版本写入undo日志中。这个隐藏列就相当于一个指针,通过他找到该记录修改前的信息如果一个记录的name从貂蝉被依次改为王昭君,西施,会有如下的记录,多个记录构成了一个版本链先回顾一下隔离级别的概念,这样看后面的内容不至于发懵√ .
2022-03-25 19:30:41
326
原创 MySQL实战:根据成本选择执行计划
CREATE TABLE `demo_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `val` int(11) NOT NULL, `name` varchar(20) NOT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `idx_val` (`val`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into demo_table (val, name.
2022-03-25 18:14:35
526
原创 MySQL实战:Buffer Pool 提高页的访问速度
Buffer pool的构成如下如何知道哪个缓存页没有使用?单纯的lru链表有很多问题mysql> SHOW VARIABLES LIKE 'innodb_old_blocks_pct';+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| innodb_old_blocks_pct | 37 |+-------------..
2022-03-25 15:09:50
1609
原创 MySQL实战:group by 语句怎么优化?
参考博客[1]https://mp.weixin.qq.com/s/EybebcYX4i13r5nDRG14fg[2]https://juejin.cn/post/7053966777088213005
2022-03-24 20:46:39
301
原创 MySQL实战:order by 语句怎么优化?
介绍参考博客[1]https://mp.weixin.qq.com/s/yUrq3UfCKP91jRp9VEFT6w
2022-03-24 20:19:44
4523
原创 MySQL实战:explain详解(下)
explain的使用possilbe_keys针对一个表进行查询时,有哪些潜在可以使用的索引。比如你有2个索引key(x1,x2,x3)和key(x1,x2,x4),此时在where语句中要根据x1和x2进行查询,很明显2个索引都能使用,那么使用哪个索引呢?通过我们之前分享的成本优化方法,去估算使用2个索引进行查询的成本,看使用哪个索引的成本更低,就使用哪个索引,最终选择的索引就是key这个字段的值key实际使用到的索引key_len索引的长度,用于判断联合索引是否被完全使用建立如下的表.
2022-03-23 07:16:18
775
原创 MySQL实战:使用存储过程造测试数据
使用存储过程造测试数据CREATE TABLE single_table ( id INT NOT NULL AUTO_INCREMENT, key1 VARCHAR(100), key2 INT, key3 VARCHAR(100), key_part1 VARCHAR(100), key_part2 VARCHAR(100), key_part3 VARCHAR(100), common_field VARCHAR(100), P
2022-03-23 06:42:04
973
原创 MySQL实战:join 语句怎么优化?
三种join的方式Simple Nested-Loop JoinBlock Nested-Loop JoinIndex Nested-Loop Join参考博客[1]
2022-03-22 19:57:12
2593
原创 MySQL实战:索引优化策略有哪些?
索引的种类众所周知,索引类似于字典的目录,可以提高查询的效率。索引从物理上可以分为:聚集索引,非聚集索引从逻辑上可以分为:普通索引,唯一索引,主键索引,联合索引,全文索引索引优化策略不要在索引列上进行运算或使用函数在列上进行运算或使用函数会使索引失效,从而进行全表扫描。如下面例子在publish_time,id列上分别加上索引,publish_time为datetime类型,id为int类型-- 全表扫描select * from article where year(publish_ti.
2022-03-21 07:59:15
446
原创 MySQL实战:如何快速定位慢SQL
开启慢查询日志在项目中我们会经常遇到慢查询,当我们遇到慢查询的时候一般都要开启慢查询日志,并且分析慢查询日志,找到慢sql,然后用explain来分析系统变量MySQL和慢查询相关的系统变量如下参数含义slow_query_log是否启用慢查询日志, ON为启用,OFF为没有启用,默认为OFFlog_output日志输出位置,默认为FILE,即保存为文件,若设置为TABLE,则将日志记录到mysql.show_log表中,支持设置多种格式slow_query_l.
2022-03-21 07:03:03
9124
4
原创 MySQL实战:explain详解(上)
如何分析慢sql?在工作中,我们用于捕捉性能问题最常用的就是打开慢查询日志,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。需要注意的是,生成的QEP并不确定,它可能会根据很多因素发生改变。MySQL不会将一个QEP和某个给定查询绑定,QEP将由SQL语句每次执行时的实际情况确定,即便使用存储过程也是如此。尽管在存储过程中SQL.
2022-03-20 20:15:36
967
原创 RocketMQ源码解析:消息丢失如何排查?
RocketMQ如何消费消息?RocketMQ消费消息RocketMQ消息丢失常用排查套路消息丢失导致数据不一致public enum TrackType { CONSUMED, CONSUMED_BUT_FILTERED, PULL, NOT_CONSUME_YET, NOT_ONLINE, UNKNOWN}类型解释CONSUMED消息已经被消费CONSUMED_BUT_FILTERED消息已经被投递且被过滤.
2022-03-20 16:30:18
3244
原创 RocketMQ源码解析:消息发送和消费核心流程汇总
从上帝视角看一下消息发送和消费当我们使用RocketMQ时,RocketMQ-Dashboard是一个非常好用的图形化界面工具我们首先在RocketMQ-Dashboard上创建一个topic,每个topic下4个队列每个topic是一类消息的集合,topic下面再细分queue是为了提高消息消费的并发度当producer发送topic消息时,应该往topic下的哪个queue来发送呢?producer会采用轮询的策略发送那么consumer应该消费哪个queue下的消息呢?当有一个消费.
2022-03-19 19:05:45
2599
原创 JVM实战:使用MAT进行内存溢出排查
内存溢出排查先来了解一下Java堆的组成机构。对于大多数应用来说,Java堆(Java Heap)是Java虚拟机锁管理的内存中最大的一块。Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存堆的结构如下新生代老年代的具体划分比例如下分代的主要作用就是为了更高效的管理内存内存泄漏和内存溢出是2个不同的概念内存泄漏:对象已经不使用了,但是还占用着内存空间,没有被释放内存溢出:堆空间不够用了,通常表现为OutOf.
2022-03-13 15:49:05
2106
1
原创 面试官:怎么解决MySQL死锁问题?
mysql中的行锁在分析死锁之前,我们先来回忆一下MySQL中的行锁。MySQL有如下三种类型的行锁,本节只简单介绍一下,想深入了解看我的其他文章Record Lock:对单个记录加锁Gap Lock:锁住记录前面的间隙,不允许插入记录Next-key Lock:同时锁住数据和数据前面的间隙,即数据和数据前面的间隙都不允许插入记录如何排查死锁?发生死锁的条件互斥,共享资源X和Y只能被一个线程占用占有且等待,线程T1已经取得共享资源X,在等待共享资源Y的时候,不释放共享资源X不可抢.
2022-03-12 17:34:26
3770
原创 JVM实战:常见的垃圾回收算法有哪些?
JVM运行数据区Java在执行Java程序的过程中会把所管理的内存划分为为若干个不同的数据区域,如下图JDK1.8之前方法区由永久代实现(永久代在堆中)JDK1.8方法区由元空间实现(元空间在本地内存)JDK1.8之前堆内存被分为新生代,老年代,永久代JDK1.8之后堆内存被分为新生代,老年代,默认比例为1:2,新生代又被分为1个Eden区+2个Survivor区(S0区,S1区),其中Eden区,S0区,S1区的默认比例为8:1:1堆和方法区是所有线程共享的数据区虚拟机栈,本地方法栈,程.
2022-03-11 10:55:29
1352
1
原创 JVM实战:类加载流程
加载当我们要使用一个类的时候,要通过ClassLoader将类加载到内存中类加载阶段主要完成如下三件事情通过全类名,获取类的二进制流解析类的二进制流为方法区内的数据结构创建一个java.lang.Class类的实例,表示该类型,作为方法区这个类的访问入口通过全类名,获取类的二进制流的方式有很多种从zip压缩包中获取从网络中获取运行时计算生成,如动态代理技术…对于非数组类型的加载阶段,即可以使用Java虚拟机内置的类加载器去完成,也可以使用用户自定义的类加载器去完成链接链.
2022-03-09 18:13:07
100
原创 JVM实战:三色标记法
垃圾回收流程的一些流程哪些对象是垃圾?当我们进行垃圾回收的时候,首先需要判断哪些对象是存活的?常用的方法有如下两种引用计数法可达性分析法Python判断对象存活的算法用的是引用计数法,而Java则使用的是可达性分析法。通过GC ROOT可达的对象,不能被回收,不可达的对象则可以被回收,搜索走过的路径叫做引用链不可达对象会进行2次标记的过程,通过GC ROOT不可达,会被第一次标记。如果需要执行finalize()方法,则这个对象会被放入一个队列中执行finalize(),如果在fina.
2022-03-09 18:00:44
1463
mybatis-generator-core-1.3.5.jar
2019-08-15
将doc文件批量转为docx文件,用python将doc文件批量转为docx文件
2017-12-28
Spring MVC学习指南
2017-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人