自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 问答 (1)
  • 收藏
  • 关注

原创 EasyExcel写数字格式数据默认为科学计数法解决方案

在使用easyExcel写长数字格式数据时用BigDecimal写,在字段上添加@ContentStyle或者@NumberFormat注解,完美解决数字格式展示问题。✅。

2023-01-03 23:25:31 6900 1

原创 【23种设计模式】之代理模式(proxy pattern)

【代码】【23种设计模式】之代理模式(proxy pattern)

2022-08-30 00:00:53 298

原创 【23种设计模式】之解释器模式(interpreter pattern)

【代码】【23种设计模式】之备忘录模式(memento pattern)

2022-08-26 23:44:58 384

原创 【23种设计模式】之备忘录模式(memento pattern)

【代码】【23种设计模式】之备忘录模式(memento pattern)

2022-08-25 23:11:51 190

原创 【23种设计模式】之访问者模式(visitor pattern)

【代码】【23种设计模式】之访问者(visitor pattern)

2022-08-24 23:42:40 250

原创 【23种设计模式】之观察者模式(observer pattern)

【代码】【23种设计模式】之观察者模式(observer pattern)

2022-08-23 22:54:18 236

原创 【23种设计模式】之状态模式

【代码】【23种设计模式】之状态模式。

2022-08-21 00:03:22 158

原创 【23种设计模式】之职责链模式

【代码】【23种设计模式】之职责链模式。

2022-08-19 23:32:19 141

原创 【23种设计模式】之策略模式(常用的模式)(strategy pattern)

代码】【23种设计模式】之策略模式(常用的模式)(strategy pattern)

2022-08-18 22:28:46 175

原创 【23种设计模式】之命令模式

代码】【23种设计模式】之命令模式。

2022-08-14 23:05:36 218

原创 附录:kafka源码启动

本文以kafka源码2.8为例,启用源码。

2022-08-12 08:30:00 608 1

原创 EasyExcel读写数字类型数据丢失精度解决方案

EasyExcel读写数字类型数据丢失精度解决方案。

2022-08-02 23:08:55 7244 3

原创 十六、kafka消费者思考之partition leader切换会引起消费者Rebalance么?

最近有朋友在问我关于消费组rebalance的问题的时候有提到过引起rebalance的原因,其中一条就是partition leader切换会引起消费组的rebalance,一般来说大家经常提的原因有以下三个 1、成员数量发生变化,有成员加入组或者退组 2、订阅的topic发生变化 3、订阅的topicPartition发生变化 我也是第一次见人说partition leader切换会引起消费者Rebalance,于是从这个角度来分析一下是不是真的会发生......

2022-06-27 09:00:00 2116 13

原创 十四、kafka消费者之SyncGroup(二)

图解kafka消费者加入组流程

2022-04-10 23:13:16 4964 7

原创 【23种设计模式】之模板方法模式

说明 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 角色 抽象模板:定义了一个模板方法和若干抽象方法和具体方法, 具体模板:继承抽象模板类并实现抽象方法 代码实现 结构简单,就是在抽象类中实现相关逻辑,子类可以选择覆盖或者继承 public abstract class Product { public abstract void start(); public abstract void product(

2022-04-03 20:30:54 681 2

原创 【23种设计模式】之建造者模式

说明 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 角色 抽象建造者 具体建造者 指挥者 产品 产品消费者 代码实现 利用建造者模式可以构建大对象,对外隐藏构建的逻辑 public abstract class Build { public abstract void setCandy(String size); public abstract Candy construct(); } public class ChocolateBuild e

2022-03-28 23:08:55 454 3

原创 十三、kafka消费者之SyncGroup(一)

这部分主要来说明消费者对协议的处理。 各个消费者都可设置partition.assignment.strategy(分区分配策略),服务端是如何处理的呢? 这块的代码要追溯到joinGroup请求结束,通过前面的源码分析我们知道joinGroup主要是判断是否发起rebalance以及等待其他组成员加入组,而在所有成员加入或者RebalanceTimeout 之后会调用onCompleteJoin方法,代码如下。 def onCompleteJoin(group: GroupMetadata): Unit

2022-03-20 22:50:20 5356

原创 十二、kafka消费者之joinGroup-深入理解篇

主要是kafka消费者的joinGroup这里的重点内容太多了,一篇也讲不完,所以再开一篇从几个方面来深入分析。 group状态转换 从上一篇我们知道针对consumeGroup也有好几种状态,分别是PreparingRebalance,CompletingRebalance,Stable,Dead,Empty kafka总结的各个状态可以执行的操作及状态流转如图一 PreparingRebalance:准备重平衡 心跳检测 同步group信息 收到leaveGroupRequest 等待group成员

2022-02-08 09:00:00 3628

原创 十一、kafka消费者之joinGroup

这一节我们主要来分析joinGroup这块的代码,主要流程如图一。 流程展示 拆解JoinGroup协议 客户端的代码我们就不拿出来说了,等后面说到关键点的时候再拿出来一起分析,这里目前只需要知道会发JoinGroupRequest请求给服务端,请求及返回数据样例如下,协议的结构见图二及图三。 JoinGroupRequestData(groupId=‘mykafka-group’, sessionTimeoutMs=10000, rebalanceTimeoutMs=300000, memberId=

2022-01-17 22:07:06 5185 2

原创 七、如何修改某个分区指定的副本为leader

前言:今天我们来分析一下怎么修改分区指定的副本为leader 分析分区重分配可以实现这个功能吗? 不了解分区重分配的流程可以先学习前面关于分区重分配的知识,这里我们只是带着疑问再次回顾分区重分配的代码。 分区重分配关键代码展示 kafka.controller.KafkaController#updateCurrentReassignment 此方法的作用就是将分区重分配数据写入zk及controllerContext,这里要对controllerContext的作用特别说明一下,首先从语义上就能猜到这个类

2022-01-10 08:30:00 875

原创 十、kafka消费者之findCoordinator

在这里我们先来梳理一下consumeGroup的相关知识 1、首先,我们会给每个consume设置groupId,对于相同groupId且订阅相同topic的consume,会组成consumeGroup,如图一所示 2、对于Server端的topic来说,会有partition这个概念,如图二所示 3、现在我们有多个consume及多个partition,到底由哪个consume来消费哪个partition呢?就由consume启动时的分区分配策略来决定。 如果consume数量小于partiti

2022-01-10 08:30:00 1258

原创 【23种设计模式】之原型模式

说明 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 角色 原型角色(ps,也可以搞成两个,如抽象原型角色以及各个具体实现原型角色) 代码实现 即通过clone方法来实现对象的克隆 public class Product implements Cloneable{ private String name ; private Integer age; public String getName() { return name;

2021-12-18 22:16:44 127

原创 【23种设计模式】之抽象工厂模式

说明 为创建一组相关或相互依赖的对象提供一个接口,而无须指定他们的具体类。 角色 抽象工厂 具体工厂 抽象产品 具体产品 产品使用者 代码实现 抽象工厂模式着重于对一组具有相同主题的工厂进行封装,即产生多个不同主题的工厂类 public abstract class CreateClass { public abstract <T> T createProduct(Class<T> c); } public class CreateProductClass ex

2021-12-18 22:15:47 149

原创 九、初探kafka消费者

消费端参数配置 | ---- | ----------------------------- | ---------------- | ---- | ------------------------------------------------------------ | | 1 | bootstrap.servers | | 高 | 指定连接kafka集群所需的broker地址清单 | |

2021-12-14 08:30:00 3132

原创 六、kafka选举leader源码解析

分区leader选举脚本执行介绍 脚本参数配置 kafka触发副本选举的脚本是bin/kafka-leader-election.sh 配置参数为: 序号 参数 说明 1 bootstrap-server kafka集群地址清单 2 admin.config 指定客户端config配置文件 3 path-to-json-file 指定选举副本JSON文件 4 topic path-to-json-file或all-topic-partitions或指定topic 5 part

2021-12-06 08:45:00 1081

原创 五、详解StopReplicaRequest、UpdateMetadataRequests请求

在分析之前我们先回顾一下哪些场景会发送StopReplicaRequest 副本转换为OfflineReplica状态 private def doHandleStateChanges(replicaId: Int, replicas: Seq[PartitionAndReplica], targetState: ReplicaState): Unit = { targetState match { case OfflineReplica => //对有效的副本

2021-12-05 21:39:13 1829

原创 四、浅析kafka状态机

此文章基于kafka2.5 kafka状态机有两种,一种是ReplicaStateMachine副本状态机,另一种是PartitionStateMachine分区状态机,下面我们就来分别介绍一下 状态机启动的入口kafka.controller.KafkaController#onControllerFailover 在服务端controller选举之后会启动状态机 private def onControllerFailover(): Unit = { //……省略 replicaSt.

2021-11-29 12:06:43 2579 5

原创 三、深入分析Fetch请求协议

此文章基于kafka2.5,协议版本为11 为了能更加了解上一篇中的18b流量怎么来的,这里我们来深入分析一下 首先来看FetchRequest的结构 FetchResponse的结构 18b流量的来源 想要了解18b流量就需要深入了解kafka.server.KafkaApis#sizeOfThrottledPartitions方法,代码如下 private def sizeOfThrottledPartitions(versionId: Short, .

2021-11-22 22:49:21 3475

原创 二、kafka分区副本重分配-限流

这一篇我们主要来看看分区副本重分配限流是如何实现的,此源码分析基于kafka2.5版本。在开始之前我们先来回顾一下分区重分配的流程,如图一所示。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 执行分区重分配脚本,这里相当于起了个kafka客户端,执行完脚本将重分配数据写入zk即返回了。 kafkaController监听到zk分区重分配节点数据变动,会调相应的handler来处理数据,这里相当于kafka服务端大脑的角色,控制了分区重分配主要处理的流程,并发送命令给其他节点执行,描

2021-11-19 21:38:40 2235

原创 【23种设计模式】之工厂方法模式

说明 定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。 角色 抽象工厂 具体工厂 抽象产品 具体产品 产品使用者 代码实现 工厂模式是很多地方常用的模式,即把创建对象的权利交给工厂类来控制 public abstract class CreateClass { public abstract <T> T createProduct(Class<T> c); } public class CreateProductClas

2021-11-13 20:44:30 381

原创 【23种设计模式】之单例模式

说明 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 角色 只有一个角色,就是单例 代码实现 最好的还是第四种方式,实现了懒加载,又不需要加锁,1跟3都是立即加载,2是需要加锁 public class SingleClassOne { public static SingleClassOne singleClassOne = new SingleClassOne(); private SingleClassOne(){ System.out

2021-11-09 20:45:56 271

原创 附件:activiti表说明

23张表说明 序号 表名 说明 1 act_ge_bytearray 二进制数据表 2 act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,主键策略也在这里 3 act_hi_actinst 历史节点表 4 act_hi_attachment 历史附件表 5 act_hi_comment 历史意见表 6 act_hi_identitylink 历史流程人员表 7 act_hi_detail 历史详情表,提供历史变量

2021-11-08 23:24:32 979

原创 二、activiti流程运行原理

activiti核心处理类 RepositoryService:处理流程发布,流程定义等 RuntimeService:运行时处理类,提供开启流程、获取流程相关的参数,获取流程监听等数据 FormService:流程自定义表单处理类 IdentityService:用户权限处理类 TaskService:任务处理类 HistoryService:历史数据处理类 ManagementService:定时任务处理类 启动流程原理 启动流程入口 ProcessInstance processInsta

2021-11-08 23:23:25 2452

原创 一、activiti如何加载流程文件

activiti5.0与springboot集成 添加依赖 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>5.22.0</version> </dependency>

2021-11-08 23:22:31 1414

原创 一、kafka分区副本重分配-主流程

kafka分区副本重分配的脚本是kafka-reassign-partitions.sh 配置参数为: 序号 参数 说明 1 bootstrap-server kafka集群地址清单 2 command-config 3 zookeeper zk集群地址 4 generate 生成分区副本重分配策略 5 execute 按照策略json执行分区副本重分配 6 verify 验证迁移任务是否成功 7 reassignment-json-file 指定重分配策略文件

2021-11-08 23:09:11 1526

原创 Kafka重分配流程图

2021-11-07 00:02:15 1230

原创 三、kafka中事务的使用

本来以为我用过幂等性了,再使用事务应该很简单,不知道幂等性使用的可以去查看上一篇。 首先肯定是照着文档配置生产者,配置如下: Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092,localhost:9093,localhost:9094"); props.put("acks", "all"); props.put("retries", 3)

2021-09-04 14:59:57 837 2

原创 LongAdder源码解析

LongAdder核心源码如下 public void add(long x) { Cell[] as; long b, v; int m; Cell a; if ((as = cells) != null || !casBase(b = base, b + x)) { boolean uncontended = true; if (as == null || (m = as.length - 1) < 0 ||

2021-08-31 17:57:05 192

原创 java中Unsafe使用方法

平常在看源码的时候经常会看到代码使用Unsafe类,比如ReentrantLock或者AtomicInteger类。 代码如下 public class ServiceNew implements Runnable{ private volatile int value ; private static Unsafe unsafe = null; private volatile int newValue; private static final long off

2021-08-31 12:58:20 815 1

原创 二、kafka中幂等的使用

kafka幂等性是针对生产者的,需要开启以下配置 1、enable.idempotence:true 2、retries:大于0,如果小于等于0的话则抛出ConfigException Exception in thread "main" org.apache.kafka.common.config.ConfigException: Must set retries to non-zero when using the idempotent producer. at org.apache.kafk

2021-08-19 22:39:11 909 1

空空如也

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

TA关注的人

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