自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kafka consumer group rebalance

之所以会产生 stop-the-world 是因为所有的consumer 都需要重新assign partition, 所以traffic 需要停掉。避免这种情况可以配置这种 assignment strategy. 这中strategy is an extension of设置这种assignment strategy设置调整。

2025-06-05 15:30:27 1149

原创 Kafka broker 写消息的过程

Kafka的消息写入流程主要包含四个步骤:生产者发送消息到Broker,消息根据键或轮询策略分配到分区并顺序写入磁盘日志(不依赖内存缓存),通过副本机制确保容错性(根据acks配置等待确认),最后消费者按偏移量顺序读取消息(最近数据可能从OS页面缓存获取)。消息会保留指定时间(如7天)而非消费后立即删除。整个过程注重磁盘顺序写入和高效读取,利用OS缓存提升性能。

2025-06-04 18:18:14 442

原创 HashMap 的理解

即将key-value 存在一个列表中,然后根据key 的计算出的hash值(散列值)作为这个其在列表中的index。这样就可以通过 list[index] 直接读取这个key-value 了,而不需要列表所有元素。这里有一个问题就是,如果多个key 计算出来的hash 值一样,那么就存在位置重复的问题。像这样,不同的数据拥有相同散列值的情况,被称为“冲突”。解决的方法一般有链地址法(chaining)和开放地址法 (open addressing)两种。

2025-05-30 16:08:59 333

原创 kafka 常用命令

【代码】kafka 常用命令。

2025-05-20 12:08:15 606

原创 kakfa 基本了解

client producer根据record 的 key 的hash 来分配topic 的partition. 如果没有key则round-robin 分配partition。data plane 就是broker,control plane 旧的就是zookeeper,新的是 kRaft contorller。kafka 的message 是可以被多次消费的,不是消费后就被删除,而是通过 retention policy 来控制的。只是存储messages 的 topic partition 有。

2025-05-20 11:57:19 811

原创 kafka 知识点

【代码】kafka 知识点。

2025-05-20 11:33:55 119

原创 kafka 问与答

client 只需要知道一部分nodes(brokers)的地址既可以,client 会自动发现剩下的所有topic partition leader nodes, 然后连接上。

2025-05-19 11:51:16 971

原创 Kafka如何实现高性能

Kafka通过多层次的架构设计和优化实现了高性能消息传递。首先,在存储层,Kafka采用顺序I/O设计、零拷贝技术和页缓存利用,显著提升了数据读写效率。其次,在网络层,Kafka使用Reactor网络模型和批量压缩传输,优化了网络通信性能。此外,Kafka通过分区并行机制和轻量级broker设计,增强了系统的并发处理能力和可扩展性。这些优化措施使得Kafka能够处理每秒数百万条消息,并实现毫秒级延迟,成为高性能消息系统的标杆。

2025-05-15 15:20:48 846

原创 kafka connect 大概了解

Kafka Connect 是 Apache Kafka 的一个组件,用于实现数据集成,支持将数据从数据库、文件系统等外部系统导入 Kafka,或将 Kafka 数据导出到其他系统。其核心概念包括 Kafka Worker(独立实例)、Kafka Connector(数据搬运器,分为 Source 和 Sink 两种类型)和 Kafka Connect Plugin(实现 Connector 的代码包)。通过配置 Connector 和安装 Plugin,用户可以轻松实现数据集成。Kafka Connect

2025-05-14 18:44:07 824

原创 Kafka集群加入新Broker节点会发生什么

当向Kafka集群添加新的Broker节点时,新Broker会自动注册到ZooKeeper并同步集群元数据,成为Controller选举的候选者。然而,现有分区不会自动迁移到新Broker,需要管理员手动触发分区重平衡或配置自动平衡。管理员可以通过生成和执行迁移计划,或启用自动平衡配置来优化分区分布。新Broker的加入会带来轻微的性能影响,尤其是在分区迁移期间,但也会提升集群的总存储容量。最佳实践建议包括逐个加入节点、监控关键指标,并在加入后进行必要的优化操作。这些步骤确保新Broker的资源能够被充分利

2025-05-09 17:09:52 1060

原创 kafka leader traffic 重平衡

在Apache Kafka中,leader imbalance(领导者不平衡)可能导致某些broker成为瓶颈,因为它们承载了过多的分区领导者。为了解决这个问题,可以通过以下几种方法重新平衡broker流量: 自动领导者重平衡(Kafka 2.4+):启用auto.leader.rebalance.enable,Kafka会定期检查并重新分配领导者。 手动领导者选举:使用kafka-preferred-replica-election.sh脚本,将分区领导者重新分配到首选副本。 完全分区重新分配:通过kaf

2025-05-09 15:00:53 993

原创 kafka logs storage

特性说明顺序追加高效写入磁盘可被删除或压缩支持灵活的数据生命周期管理可快速索引查找借助.index和.timeindex实现高效定位有助于持久性和故障恢复数据持久化到磁盘,可随时恢复。

2025-05-08 14:57:25 902

原创 kafka records deletion policy

名称是否写入?是否压缩?说明✅ 是❌ 否当前活跃写入的 segment❌ 否✅ 是可压缩的旧 segment❌ 否❌ 否已压缩过的数据段。

2025-05-08 11:59:21 839

原创 大O记法(O Notation)

大O记法是计算机科学中用于描述算法时间复杂度和空间复杂度的数学符号表示法,它描述了算法性能如何随输入规模增长而变化。

2025-05-06 11:58:17 251

原创 垃圾收集GC的基本理解

分代回收通过减少 GC 中扫描的对象数量,达到缩短 GC 带来的平均中断时间的效果。不过由于还是需要进行大回收,因此最大中断时间并没有得到什么改善。从吞吐量来看,在对象寿命假说能够成立的程序中,由于扫描对象数量的减少,可以达到非常不错的成绩。但是,其性能会被程序行为、分代数量、大回收触发条件等因素大幅度左右。G1 的描述里就提到 分代,增量,并行等概念。而 evacuation 也是类似 复制收集算法,只是基于G1的regions做了优化。Evacuation。

2025-04-30 17:21:03 1046

原创 What is oauth2

Oauth2 设计的目的是为了可以让用户不用提供用户名密码给第三方,也能让第三方可以访问用户的resource。例如 一个app 可以用微信登录,那就是指这个app会获取用户的微信name, logo 之类的信息去创建用户并登录。当用户点击使用微信登录时,app会弹出微信授权的扫描界面,当用户打开微信扫描后,用户就可以登录这个app 了。用户扫描微信授权的二维码,这个动作意味着一 用户已经登录了微信,即完成了authentication;

2025-04-17 16:45:05 686

原创 请求是如何通过k8s service 路由到对应的pod

在kubernetes 中,请求在访问service时,是如何被路由到最终目pod的。

2025-01-03 18:06:55 1205

原创 Java 线程池如何实现 -- 解读 ThreadPoolExecutor

ThreadPoolExecutor 源码分析线程池如何实现

2025-01-02 16:26:49 940

原创 mysql 事务

事务的作用主要是保证:1.数据的原子性 2.一致性 3.隔离性–事务之间不能相互影响. 4.持久性–一旦成功执行,则不能再改变锁的主要作用是保证并发操作. 事务的隔离可以实现事务的并发,即多个事务同时执行.其实事务的隔离是通过锁机制实现的.隔离级别1.read uncommit 所有问题都不能解决 2.read commit 解决 问题1 只要别的事务提交了,其他事务立即可以查

2015-12-04 19:19:14 384

原创 mysql 锁总结

锁的粒度: 1.整个mysql 的server 级别 2.这个表的 table 级别 3.表中以行为单位的row 级别.其中,MyISAM 引擎只有 server 和table 级别.Innodb 还支持row 级别.锁有 read和write 这两种类型. 还有特别的 table 级别的read local 类型.对myisam 来说:1.read 锁 1.1 会导致加锁的session

2015-12-04 16:02:13 375

原创 内部类总结

内部类共有三种类型: 1.可以访问外部类作用域的内部类 2.局部内部类-就是定义在方法内的内部类 3.静态内部类-不能访问外部类的内部类第一类public class OuterClass{ private boolean status; public void a(){ new InenerClass().b(); } public class

2015-12-03 00:08:03 430

原创 DataSource 的理解

DriverManager 因为不支持数据连接池,所以在应用中一般都使用DataSource.DataSource 的3种实现: 1.简单的实现,和DriverManager 一样. 2.数据连接池的实现 3.分布式事务的实现,同时也实现数据连接池.一般来说数据库供应商提供的jdbc driver 会提供javax.sql.DataSource接口的简单实现类.如mysql 的就是com.my

2015-12-02 19:44:41 1964

原创 jdbc 中preparedStatment 的使用

String sql="insert into user(u_name,password,create_time) values(?,?,?)";1.获取自动生成的主键:如果要获取自动生成的主键,要如下创建preparedStatmentPreparedStatement stmt = connection.prepareStatement(sql,Statement.RETURN_GENERATE

2015-12-02 10:56:16 596

原创 javac 和java 使用的 -classpath 参数

-classpath 类路径包括 1.包含class 文件的文件夹。如/home/user/classdir //如:这个文件夹下有Employee.class 类文件。 2.jar 文件包(个人理解:jar包下有很多类文件,所以jar包也是相当于一个路径了) 3.当前路径 所以类路径在linux 下如下: -classpath .:/home/user/classdir:/home/

2015-12-02 00:08:33 626

原创 preparedStatement 理解

preparedStatement :可以翻译为 预编译语句.mysql 参考文档中的例子:mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';mysql> PREPARE stmt2 FROM @s;mysql> SET @a = 6;mysql> SET @b = 8;mysql> EXECUTE stmt2

2015-12-01 20:35:17 695

原创 JDBC 整体结构的理解

jdbc 个人理解jdbc 是java 提供的一份操作数据的标准API接口.数据库供应商根据这份接口实现各自的驱动.上层应用程序调用这些api 就可以了,不用管是如何实现的.根据JDBC 4.0 数据库供应商提供的驱动必须实现java.sql.driver 这个接口,以及包含 META-INF/services/java.sql.Driver 这个文件. jdbc api 包括的包:java.s

2015-12-01 15:31:07 382

原创 JDBC 学习总结

jdbc 个人理解jdbc 是java 提供的一份操作数据的标准API接口.数据库供应商根据这份接口实现各自的驱动.上层应用程序调用这些api 就可以了,不用管是如何实现的.根据JDBC 4.0 数据库供应商提供的驱动必须实现java.sql.driver 这个接口,以及包含 META-INF/services/java.sql.Driver 这个文件. jdbc api 包括的包:java.s

2015-12-01 15:29:53 353

原创 c 中无符号数相减依然是无符号数

int main(void){ unsigned int a=10; unsigned int b=11; if((a-b)>=0){ printf("%d \n",(a-b)); } }输出为: -1 也就是说 无符号数相减的值为 -1 ,但是依然被视为无符号数. 无符号数是大于等于0的,所以 -1>=0 就是true.

2015-11-30 15:03:30 2429 1

原创 char 类型的整型提升

unsigned char a, b;a = 0x0f;b = (~a) >> 4;printf("0x%x", b);输出为0xff; 因为 (~a) 被提升为 int 型的取反运算。 对于 MinGW gcc,int 型是 32 位, 因此 (~a) = 0xff ff ff f0, 所以截取后 b = 0xff。第二个例子:#include <stdio.h>int ma

2015-11-28 16:33:52 1487

原创 系统和进程获取内存的理解

1.为什么有些32位的系统可以使用超过4g 的内存呢?  32位代表物理地址寻址能力,就是2的32次方,刚好4G Byte,所以32位的操作系统不能访问4G以上的物理地址空间。这里没有说内存地址,因为系统不只与内存打交道,还有很多其他软件硬件设备,要与这些设备交换数据,也需要占用物理地址空间。每个设备需要多少物理地址空间,是由设备本身和驱动程序决定的。   为了解决这个问题推出了PAE技术(Pag

2015-11-26 11:33:48 476

原创 FutureTask(Runnable runnable, V result) 中的result

FutureTask 类可以包装实现了Runnable 和Callalbe 接口的类作为任务. 可以查看FutureTask 的构造函数就可以知道了. FutureTask(Callable callable) FutureTask(Runnable runnable, V result)又因为FutureTask 既继承了Future 接口又继承了Runnable 接口. 所以Fu

2015-10-13 09:45:28 1448 1

原创 构造函数和clone以及在继承中

构造函数类实例的构造创建过程是: 1.属性域被初始化为默认值(0,false,null) 2.按照在类声明的顺序初始化初始化语句和初始化块. 3.执行构造函数 所以,一个默认的空的无参构造函数并没有初始化类的实例域.因为实例域先于构造而初始化完毕了.构造函数无法被继承如果一个类没有定义构造函数,编译器会自动创建一个,如下:public class A(){}也就是说自己定义一个无参无

2015-09-29 22:38:41 902

原创 AT查看/设置 simcard 本身号码

查看:AT+CNUM +CNUM: "","+8617097278999",145,7,4 //145表示为国际号码格式设置:1 选择储存simcard 本身号码的存储单元.AT+CPBS="ON" 2.写入号码AT+CPBW=1,"+861709727

2015-09-29 11:20:34 1564

原创 AT 命令发送中文短信

如何使用AT 命令发送中文短信1.第一种是使用TEXT 模式1.1 AT+CSCS=? 查询支持哪些编码AT+CSCS=? +CSCS: ("GSM","HEX","IRA","PCCP437","UCS2","8859-1")

2015-09-25 11:50:31 11278 1

原创 markdown 标记补充

`package com.skyline.action;import static org.junit.Assert.*;import org.junit.Test;public class StrArrTest {@Testpublic void test() { String abc="a,b,c,"; String strarr[]=abc.split(","); Sy

2015-09-13 16:24:33 382

原创 maven 学习

maven 优化编译速度maven 其他maven 优化编译速度1.1 在编译时跳过test 阶段mvn package -DskipTests=true1.2 使用多线程同时编译mvn -T 4 package – will use 4 threadsmvn -T 1C package – will use 1 thread per available CPU core1.3 只编译需要的

2015-09-13 15:31:47 360

空空如也

空空如也

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

TA关注的人

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