自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 代码设计-geek KISS原则和YAGNI原则

KISS原则就是保持代码可读和可维护的重要手段。代码足够简单,也就意味着很容易读懂,bug比较难隐藏。即便出现bug,修复起来也比较简单。

2023-04-20 14:00:11 58

原创 设计模式geek01-控制反转-依赖注入

控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程可以通过框架来控制。依赖注入("DI"):不通过new()的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。01 利用抽象类在框架预留的扩展点。

2023-04-20 13:05:05 100 1

原创 ElasticSearch 集群高可用存储架构

in-memory buffer 刷新生成segment每秒一次,文档刷新成segment就可以被搜索到了,ElasticSearch提供了refresh API 来控制这个过程。translog 刷新到磁盘可以动态控制每个索引的translog行为:index.translog.sync_interval :translog多久被同步到磁盘并提交一次。默认5秒。这个值不能小于100ms。

2023-04-14 12:33:37 590

原创 24 geek-请求是怎么被处理的?

从这张图中,我们可以发现,多个客户端会发送请求给到Reactor。Reactor有个请求分发线程Dispatcher,也就是图中的Acceptor,它会将不同的请求下发到多个工作线程中处理。Kafka提供了Broker端参数num.network.threads,用于调整该网络线程池的线程数。Reactor模式如图。

2023-04-10 12:52:41 75

原创 23 geek-Kafka副本机制详解

如果这个同步过程的速度持续慢于Leader副本的消息写入速度,那么在replica.lag.time.max.ms时间后,此Follower副本就会被认为是与Leader副本不同步的,因此不能再放入ISR中。这就是说,只要一个Follower副本落后Leader副本的时间不连续超过10秒,那么Kafka就认为该Follower副本与Leader是同步的,即使此时Follower副本中保存的消息明显少于Leader副本中的消息。倘若该副本后面慢慢地追上了Leader的进度,那么它是能够重新被加回ISR的。

2023-04-10 12:44:22 76

原创 22geek-消费者组消费进度监控都怎么实现?

滞后:消费速度小于生产速度由于消费者的速度无法匹及生产者的速度,极有可能导致它消费的数据已经不在操作系统的页缓存中了。这样的话,消费者就不得不从磁盘上读取它们,这就进一步拉大了与生产者的差距,进而出现马太效应,即那些Lag原本就很大的消费者会越来越慢,Lag也会越来越大。

2023-04-10 11:46:05 34

原创 21 geek-Java 消费者是如何管理TCP连接的?

与producer不同,消费者不会再new的时候创建tcp链接。生产者入口类KafkaProducer在new的时候,会在后台默默地启动一个Sender线程,这个线程负责Socket连接的创建(缺点:Java构造函数中启动线程,会造成t,这始终是一个隐患。创建时机:01、还记得消费者端有个组件叫协调者(Coordinator)吗?它驻留在Broker端的内存中,负责消费者组的组成员管理和各个消费者的位移提交管理。

2023-04-10 11:30:31 55

原创 redis 知识点整合

Redis 底层存储的还不是一个简单的 linkedlist,而是称之为quicklist 的一个结构首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。数据量比较多的的时候才会改成 quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间,而且会加重内存的碎片化。Redis 事务只能保证,不能保证Redis事务时放到一个中,由于是单线程的所以保证了隔离性。

2023-04-07 15:42:59 72

原创 IDEA 懒人代码生成快捷方式

搜索postfix。

2023-04-07 12:41:25 19

原创 geek-Java生产者是如何管理TCP连接的?

试想一下,在一个有着1000台Broker的集群中,你的Producer可能只会与其中的3~5台Broker长期通信,但是Producer启动后依次创建与这1000台Broker的TCP连接。值得注意的是,在第二种方式中,TCP连接是在Broker端被关闭的,但其实这个TCP连接的发起方是客户端,因此在TCP看来,这属于被动关闭的场景,即passive close。更严谨地说,作为一个基于报文的协议,TCP能够被用于多路复用连接场景的前提是,上层的应用协议(比如HTTP)允许发送多条消息。

2023-04-06 10:39:13 77

原创 geek-客户端都有哪些不常见但是很高级的功能?

而Flume中的拦截器也是同理,它们插入的逻辑可以是修改待发送的消息,也可以是创建新的消息,甚至是丢弃消息。在上面的消费者拦截器中,我们在真正消费一批消息前首先更新了它们的总延时,方法就是用当前的时钟时间减去封装在消息中的创建时间,然后累计得到这批消息总的端到端处理延时并更新到Redis中。从技术上来说,我们可以在客户端程序中增加这样的统计逻辑,但是对于那些将Kafka作为企业级基础架构的公司来说,在应用代码中编写统一的监控逻辑其实是很难的,毕竟这东西非常灵活,不太可能提前确定好所有的计算逻辑。

2023-04-06 07:48:12 158

原创 geek-如何配置Kafka无消息丢失

当增加主题分区后,在某段“不凑巧”的时间间隔后,Producer先于Consumer感知到新增加的分区,而Consumer设置的是“从最新位移处”开始读取消息,因此在Consumer感知到新分区前,Producer发送的这些消息就全部“丢失”了,或者说Consumer无法读取到这些消息。我们先从什么是消息丢失开始说起,明确了Kafka持久化保证的责任边界,随后以这个规则为标尺衡量了一些常见的数据丢失场景,最后通过分析这些场景,我给出了Kafka无消息丢失的“最佳实践”。第一个核心要素是“已提交的消息”。

2023-04-06 07:45:37 61

原创 zookeeper的选举机制

但Eureka中,集群是对等的,地位是相同的,虽不能保证一致性,但至少可以提供注册服务。对于ZK1而言,它的投票是(1, 0),接收ZK2的投票为(2, 0),首先会比较两者的ZXID,均为0,再比较myid,此时ZK2的myid最大,于是ZK2胜。配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。,同一轮投票过程中的逻辑时钟值是相同的。组成的服务器集群为例。

2023-04-05 18:50:33 445

原创 多线程算法

轮训线程,使每个线程输出5个数字。

2023-04-05 18:32:08 31

原创 java基础-泛型应用

【代码】java基础-泛型应用。

2023-04-05 18:30:02 30

原创 Dubbo面试题

rmi:采用 JDK 标准的 rmi 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多,可传文件,传输协议 TCP。,client按照协议将请求信息序列化成字节序列发送给server端,server端根据协议,将数据反序列化成“对象”,然后执行指定的方法,并将方法的返回值再次按照协议序列化成字节流,响应给client,client按照协议将字节流反序列话成”对象”。

2023-04-05 18:27:15 109

原创 线程池配置的基本信息

6、ThreadFactory threadFactory 创建线程的工厂。2、int maximumPoolSize 最大核心线程数。3、long keepAliveTime 空闲线程存活时长。1、固定大小线程池 newFixedThreadPool。2、缓存的线程池 newCachedThreadPool。3、单个线程池 newSingleThreadPool。1、int corePoolSize 核心线程数。丢弃队列最老任务,添加新任务。使用调用线程执行任务。抛出异常,中止任务。

2023-04-05 18:11:03 27

原创 Spring bean的生命周期

2023-04-05 17:56:38 42

原创 类加载机制和类加载器

当程序主动使用某个类时,如果该类还未被加载到内存中,则jvm会通过化三个过程对类进行初始化。

2023-04-05 17:49:39 64

原创 垃圾回收算法

GC如何判断对象死活1 引用计数法:给对象添加一个引用计数器,每过一个引用计数器值就+1,少一个引用就-1。当它的引用变为0时,该对象就不能再被使用。引起的问题:不能解决循环引用2可达性分析法从gc root 触发,不可达将被通知gc去回收gc root类型1 虚拟机栈引用的对象2 方法区静态属性引用的对象3 方法区常量引用的对象4JNI引用的对象垃圾回收算法标记清除算法1 把所有活动对象标记出来2 将没有被标记的对象同一处理问题:.

2023-04-05 17:17:14 32

原创 mysql 间隙锁

概念当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(GAP LOCK),间隙锁和行锁合称Next-Key Lock。举例来说,假如user表中只有101条记录,其empid的值分别是 1,2,…,100,...

2019-09-27 21:33:07 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除