自定义博客皮肤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 4982 1

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

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

2022-08-30 00:00:53 186

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

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

2022-08-26 23:44:58 206

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

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

2022-08-25 23:11:51 110

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

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

2022-08-24 23:42:40 175

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

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

2022-08-23 22:54:18 131

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

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

2022-08-21 00:03:22 65

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

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

2022-08-19 23:32:19 72

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

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

2022-08-18 22:28:46 70

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

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

2022-08-14 23:05:36 137

原创 附录:kafka源码启动

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

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

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

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

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

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

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

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

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

图解kafka消费者加入组流程

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

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

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

2022-04-03 20:30:54 599 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 385 3

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

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

2022-03-20 22:50:20 5038

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

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

2022-02-08 09:00:00 2826

原创 十一、kafka消费者之joinGroup

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

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

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

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

2022-01-10 08:30:00 710

原创 十、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 1022

原创 【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 74

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

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

2021-12-18 22:15:47 91

原创 九、初探kafka消费者

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

2021-12-14 08:30:00 2902

原创 六、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 823

原创 五、详解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 1656

原创 四、浅析kafka状态机

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

2021-11-29 12:06:43 2433 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 3321

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

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

2021-11-19 21:38:40 2031

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

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

2021-11-13 20:44:30 317

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

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

2021-11-09 20:45:56 197

原创 附件: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 736

原创 二、activiti流程运行原理

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

2021-11-08 23:23:25 2040

原创 一、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 1142

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

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

2021-11-08 23:09:11 1201

原创 Kafka重分配流程图

2021-11-07 00:02:15 797

原创 三、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 639 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 115

原创 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 609 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 720 1

空空如也

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

TA关注的人

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