- 博客(47)
- 问答 (1)
- 收藏
- 关注
原创 EasyExcel写数字格式数据默认为科学计数法解决方案
在使用easyExcel写长数字格式数据时用BigDecimal写,在字段上添加@ContentStyle或者@NumberFormat注解,完美解决数字格式展示问题。✅。
2023-01-03 23:25:31
6226
1
原创 【23种设计模式】之解释器模式(interpreter pattern)
【代码】【23种设计模式】之备忘录模式(memento pattern)
2022-08-26 23:44:58
316
原创 【23种设计模式】之策略模式(常用的模式)(strategy pattern)
代码】【23种设计模式】之策略模式(常用的模式)(strategy pattern)
2022-08-18 22:28:46
118
原创 十六、kafka消费者思考之partition leader切换会引起消费者Rebalance么?
最近有朋友在问我关于消费组rebalance的问题的时候有提到过引起rebalance的原因,其中一条就是partition leader切换会引起消费组的rebalance,一般来说大家经常提的原因有以下三个1、成员数量发生变化,有成员加入组或者退组2、订阅的topic发生变化3、订阅的topicPartition发生变化我也是第一次见人说partition leader切换会引起消费者Rebalance,于是从这个角度来分析一下是不是真的会发生......
2022-06-27 09:00:00
1888
13
原创 【23种设计模式】之模板方法模式
说明定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。角色抽象模板:定义了一个模板方法和若干抽象方法和具体方法,具体模板:继承抽象模板类并实现抽象方法代码实现结构简单,就是在抽象类中实现相关逻辑,子类可以选择覆盖或者继承public abstract class Product { public abstract void start(); public abstract void product(
2022-04-03 20:30:54
626
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
406
3
原创 十三、kafka消费者之SyncGroup(一)
这部分主要来说明消费者对协议的处理。各个消费者都可设置partition.assignment.strategy(分区分配策略),服务端是如何处理的呢?这块的代码要追溯到joinGroup请求结束,通过前面的源码分析我们知道joinGroup主要是判断是否发起rebalance以及等待其他组成员加入组,而在所有成员加入或者RebalanceTimeout之后会调用onCompleteJoin方法,代码如下。def onCompleteJoin(group: GroupMetadata): Unit
2022-03-20 22:50:20
5185
原创 十二、kafka消费者之joinGroup-深入理解篇
主要是kafka消费者的joinGroup这里的重点内容太多了,一篇也讲不完,所以再开一篇从几个方面来深入分析。group状态转换从上一篇我们知道针对consumeGroup也有好几种状态,分别是PreparingRebalance,CompletingRebalance,Stable,Dead,Emptykafka总结的各个状态可以执行的操作及状态流转如图一PreparingRebalance:准备重平衡心跳检测同步group信息收到leaveGroupRequest等待group成员
2022-02-08 09:00:00
3214
原创 十一、kafka消费者之joinGroup
这一节我们主要来分析joinGroup这块的代码,主要流程如图一。流程展示拆解JoinGroup协议客户端的代码我们就不拿出来说了,等后面说到关键点的时候再拿出来一起分析,这里目前只需要知道会发JoinGroupRequest请求给服务端,请求及返回数据样例如下,协议的结构见图二及图三。JoinGroupRequestData(groupId=‘mykafka-group’, sessionTimeoutMs=10000, rebalanceTimeoutMs=300000,memberId=
2022-01-17 22:07:06
4693
2
原创 七、如何修改某个分区指定的副本为leader
前言:今天我们来分析一下怎么修改分区指定的副本为leader分析分区重分配可以实现这个功能吗?不了解分区重分配的流程可以先学习前面关于分区重分配的知识,这里我们只是带着疑问再次回顾分区重分配的代码。分区重分配关键代码展示kafka.controller.KafkaController#updateCurrentReassignment此方法的作用就是将分区重分配数据写入zk及controllerContext,这里要对controllerContext的作用特别说明一下,首先从语义上就能猜到这个类
2022-01-10 08:30:00
791
原创 十、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
1131
原创 【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
93
原创 【23种设计模式】之抽象工厂模式
说明为创建一组相关或相互依赖的对象提供一个接口,而无须指定他们的具体类。角色抽象工厂具体工厂抽象产品具体产品产品使用者代码实现抽象工厂模式着重于对一组具有相同主题的工厂进行封装,即产生多个不同主题的工厂类public abstract class CreateClass { public abstract <T> T createProduct(Class<T> c);}public class CreateProductClass ex
2021-12-18 22:15:47
110
原创 九、初探kafka消费者
消费端参数配置| ---- | ----------------------------- | ---------------- | ---- | ------------------------------------------------------------ || 1 | bootstrap.servers | | 高 | 指定连接kafka集群所需的broker地址清单 ||
2021-12-14 08:30:00
2995
原创 六、kafka选举leader源码解析
分区leader选举脚本执行介绍脚本参数配置kafka触发副本选举的脚本是bin/kafka-leader-election.sh配置参数为:序号参数说明1bootstrap-serverkafka集群地址清单2admin.config指定客户端config配置文件3path-to-json-file指定选举副本JSON文件4topicpath-to-json-file或all-topic-partitions或指定topic5part
2021-12-06 08:45:00
917
原创 五、详解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
1719
原创 四、浅析kafka状态机
此文章基于kafka2.5kafka状态机有两种,一种是ReplicaStateMachine副本状态机,另一种是PartitionStateMachine分区状态机,下面我们就来分别介绍一下状态机启动的入口kafka.controller.KafkaController#onControllerFailover在服务端controller选举之后会启动状态机private def onControllerFailover(): Unit = { //……省略 replicaSt.
2021-11-29 12:06:43
2508
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
3376
原创 二、kafka分区副本重分配-限流
这一篇我们主要来看看分区副本重分配限流是如何实现的,此源码分析基于kafka2.5版本。在开始之前我们先来回顾一下分区重分配的流程,如图一所示。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传执行分区重分配脚本,这里相当于起了个kafka客户端,执行完脚本将重分配数据写入zk即返回了。kafkaController监听到zk分区重分配节点数据变动,会调相应的handler来处理数据,这里相当于kafka服务端大脑的角色,控制了分区重分配主要处理的流程,并发送命令给其他节点执行,描
2021-11-19 21:38:40
2133
原创 【23种设计模式】之工厂方法模式
说明定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。角色抽象工厂具体工厂抽象产品具体产品产品使用者代码实现工厂模式是很多地方常用的模式,即把创建对象的权利交给工厂类来控制public abstract class CreateClass { public abstract <T> T createProduct(Class<T> c);}public class CreateProductClas
2021-11-13 20:44:30
337
原创 【23种设计模式】之单例模式
说明确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。角色只有一个角色,就是单例代码实现最好的还是第四种方式,实现了懒加载,又不需要加锁,1跟3都是立即加载,2是需要加锁public class SingleClassOne { public static SingleClassOne singleClassOne = new SingleClassOne(); private SingleClassOne(){ System.out
2021-11-09 20:45:56
219
原创 附件:activiti表说明
23张表说明序号表名说明1act_ge_bytearray二进制数据表2act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,主键策略也在这里3act_hi_actinst历史节点表4act_hi_attachment历史附件表5act_hi_comment历史意见表6act_hi_identitylink历史流程人员表7act_hi_detail历史详情表,提供历史变量
2021-11-08 23:24:32
836
原创 二、activiti流程运行原理
activiti核心处理类RepositoryService:处理流程发布,流程定义等RuntimeService:运行时处理类,提供开启流程、获取流程相关的参数,获取流程监听等数据FormService:流程自定义表单处理类IdentityService:用户权限处理类TaskService:任务处理类HistoryService:历史数据处理类ManagementService:定时任务处理类启动流程原理启动流程入口 ProcessInstance processInsta
2021-11-08 23:23:25
2209
原创 一、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
1282
原创 一、kafka分区副本重分配-主流程
kafka分区副本重分配的脚本是kafka-reassign-partitions.sh配置参数为:序号参数说明1bootstrap-serverkafka集群地址清单2command-config3zookeeperzk集群地址4generate生成分区副本重分配策略5execute按照策略json执行分区副本重分配6verify验证迁移任务是否成功7reassignment-json-file指定重分配策略文件
2021-11-08 23:09:11
1343
原创 三、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
749
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
135
原创 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
684
1
原创 二、kafka中幂等的使用
kafka幂等性是针对生产者的,需要开启以下配置1、enable.idempotence:true2、retries:大于0,如果小于等于0的话则抛出ConfigExceptionException 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
799
1
空空如也
关于线程池ThreadPoolExecutor的问题
2021-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人