- 博客(47)
- 问答 (1)
- 收藏
- 关注
原创 EasyExcel写数字格式数据默认为科学计数法解决方案
在使用easyExcel写长数字格式数据时用BigDecimal写,在字段上添加@ContentStyle或者@NumberFormat注解,完美解决数字格式展示问题。✅。
2023-01-03 23:25:31
6900
1
原创 【23种设计模式】之解释器模式(interpreter pattern)
【代码】【23种设计模式】之备忘录模式(memento pattern)
2022-08-26 23:44:58
384
原创 【23种设计模式】之策略模式(常用的模式)(strategy pattern)
代码】【23种设计模式】之策略模式(常用的模式)(strategy pattern)
2022-08-18 22:28:46
175
原创 十六、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
原创 【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中事务的使用
本来以为我用过幂等性了,再使用事务应该很简单,不知道幂等性使用的可以去查看上一篇。 首先肯定是照着文档配置生产者,配置如下: 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
空空如也
关于线程池ThreadPoolExecutor的问题
2021-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅