自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis实操(20429字总结)

之前都是通过看视屏,博客,公众号的形式来学习,还是很零散的,这次买了工作以来第一本技术书《Redis深度历险:核心原理与应用实践》,先粗略读了一遍,现在用笔记的形式把重点再记录下。 2020-7.26注:List的结构中:当数据量大的时候 Redis将链表和ziplist结合起来组成了quicklist1.2.2 5种基础数据结构stringRedis的字符串是动态字符串,是可以修改的字符串,采用预分配冗余空间的方式来减少内存的频繁分配。当字符串长度小于1MB是,扩容

2020-07-26 16:23:05 819 2

原创 从JMM数据原子操作来分析volatile

并发编程的三个性质:原子性,可见性,有序性JMM数据原子操作:volatile 进行i++操作会出问题的分析两线程同时对i做i++,线程1往内存写经过总线时被线程2感知到了,线程2做i++的操作已经做完了,然而因为感知到i变了,做i无效化重新读,所以线程2做的那次i++的操作执行了但是没起作用问题在讨论原子性操作时,我们经常会听到一个说法:任意单个volatile变量的读写具有原子性,但是volatile++这种操作除外。所以问题就是:为什么volatile++不是原子性

2020-06-24 11:01:42 211 1

原创 Python中字符串String去除出换行符(\n,\r)和空格的问题

所以需要使用 .replace(' ', '') 来替换空格项。用 replace("\n", ""),与 replace("\r", ""),后边的内容替换掉前边的。在Python的编写过程中,获取到的字符串进场存在不明原因的换行和空格,如何整合成一个单句,成为问题。2.使用 .replace('\n', '') 去除换行。1.使用 .strip() 只能够去除字符串首尾的空格,不能够去除中间的空格。python中同样一句话:print (u'前面的内容\r只显示后面的内容')linux只用\n换行。

2022-11-14 16:16:52 306

原创 python判断list是否为空

版权声明:本文为CSDN博主「鸭脖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/Yelbosh/article/details/7558981。判断一个 list 是否为空。

2022-11-14 16:15:25 85

原创 创建共享内存后,进程结束,共享内存是否会消失?

管道、socket、共享内存、消息队列、信号量等,是属于内核级的,一旦创建后就由内核管理,若进程不对其主动释放,那么这些变量会一直存在,除非重启系统。

2022-11-08 17:05:25 132

原创 kafka集群下线broker节点实践方法

在zookeeper的客户端使用get /kafka/brokers/ids/[0,1,2](一个数字代表你的brokerid),如果返回信息中的jmx_port 值为-1就说明启动时没有指定JMX_PORT,这样不需要进行下面步骤,请直接重启集群加上配置,并且server.properties需要设置auto.create.topics.enable=false。版权声明:本文为CSDN博主「TURING.DT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

2022-11-03 12:03:48 129

原创 why redis-cluster use 16384 slots?

The reason is:So 16k was in the right range to ensure enough slots per master with a max of 1000 maters, but a small enough number to propagate the slot configuration as a raw bitmap easily. Note that in small clusters the bitmap would be hard to compress

2022-11-01 18:00:11 20

原创 mmap可以让程序员解锁哪些骚操作?

但谈到mmap的与标准IO(read/write)的性能情况就比较复杂了,标准IO设计到系统调用以及用户态内核态的copy问题,而mmap则涉及到维持内存与磁盘文件的映射关系以及缺页处理的开销,单纯的从理论分析这二者半斤八两,如果你的应用场景对性能要求较高,那么你需要基于真实场景进行测试。这个优势在于处理大文件场景,这里的大文件指的是文件的大小超过你的物理内存,在这种场景下如果你使用传统的read/write,那么你必须一块一块的把文件搬到内存,处理完文件的一小部分再处理下一部分。

2022-11-01 16:46:18 18

原创 kafka知识点

某一时刻,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为最新的 Y,由此便产生了数据不一致的问题。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除 CPU 在这方面的负载。Follower副本只是采用拉(PULL)的方式,被动地同步Leader副本中的数据,并且在Leader副本所在的Broker宕机后,随时准备竞选Leader副本。

2022-11-01 16:18:26 457

原创 终于知道Kafka为什么这么快了!

又由于顺序写入的原因,所以 Kafka 采用各种删除策略删除数据的时候,并非通过使用“读 - 写”模式去修改文件,而是将 Partition 分为多个 Segment,每个 Segment 对应一个物理文件,通过删除整个文件的方式去删除 Partition 内的数据。传统的 Linux 系统中,标准的 I/O 接口(例如read,write)都是基于数据拷贝操作的,即 I/O 操作会导致数据在内核地址空间的缓冲区和用户地址空间的缓冲区之间进行拷贝,所以标准 I/O 也被称作缓存 I/O。

2022-11-01 16:07:53 149

原创 深入理解Kafka服务端之索引文件及mmap内存映射

虽然写数据时偏移量索引文件和时间戳索引文件会同时写入一个索引项,但是两个索引项的相对偏移量不一定是一样的,这是因为:生产者生产消息时可以指定时间戳,导致一个批次中的消息,偏移量最大的对应的时间戳不一定最大,而时间戳索引文件中保存的是一个批次中最大的时间戳及对应消息的相对偏移量。对应的消息时, 需要配合偏移量索引文件进行查找。综上,对于active日志段,不管索引项具体有多少,都先生成10M的索引文件(包括偏移量索引文件和时间戳索引文件)来存储索引,当滚动生成新的日志段时,会将这个索引文件调整为实际大小。

2022-11-01 16:06:57 505

原创 Kafka源码解析之内存池原理

Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。

2022-10-31 16:14:26 152

原创 Kafka源码解析之内存池原理

Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。

2022-10-31 16:13:21 22

原创 Kafka源码解析之内存池原理

Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。

2022-10-31 16:08:52 18

原创 Kafka源码解析之内存池原理

Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。

2022-10-31 16:04:06 13

原创 Kafka源码解析之内存池原理

Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。

2022-10-31 16:00:15 16

原创 Kafka源码分析系列-目录(收藏关注不迷路)

Kafka源码分析系列-目录(收藏关注不迷路) - 知乎

2022-10-31 15:58:25 115

原创 du -sh * 与 ls -lh 显示文件大小不一样

du -sh * 与 ls -lh 显示文件大小不一样如下所示[www@esjob-02 crm]$ du -sh aaa.txt75M aaa.txt [www@esjob-02 crm]$ ls -s aaa.txt122480 aaa.txt[www@esjob-02 crm]$ ls -lh aaa.txt-rw-rw-r-- 1 www www 32G Mar 23 16:52 aaa.txt[www@esjob-02

2022-10-31 15:56:04 349

原创 Linux系统stat指令用法

stat指令:文件/文件系统的详细信息显示。stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:stat命令-->用来显示文件的详细信息,包括inode, atime, mtime, ctime适用场景:查看文件或目录的诸如atime,mtime,ctime等信息即可使用stat命令,也可使用ls命令,但相比而言,stat还可以看到设备号,环境等信息。

2022-10-28 17:09:29 79

原创 NO1-Kafka如何通过网络接收/发送请求

Kafka支持两种类型的请求:data-plane,control-planeKafkaRequestHandlerPool里面有8个KafkaRequestHandlerSocketServer会开启Acceptor线程和Processor线程,Acceptor线程将新连接入队,Processor线程获取新连接,注入新连接到selector上。然后执行poll方法读取连接的数据,读取到数据之后会调用requestChannel.sendRequest(req)。

2022-10-28 15:38:44 603

原创 Kafka消息体大小设置的一些细节

producer端:max.request.size=5242880(5M)broker:message.max.bytes=6291456(6M)consumer:fetch.max.bytes=7340032(7M) max.request.size < message.max.bytes < fetch.max.bytes。之前有个疑问就是:假如 max.request.size 大于 batch.size,那么该条消息会不会分多个 batch 发送到 broker?

2022-10-27 20:57:53 363 1

原创 性能调优|生产环境kafka集群400W/tps为啥就扛不住了?

通过阅读源码,这段代码是分区Leader在追加数据时为了保证写入分区时数据的完整性,对分区进行的加锁,即如果对同一个分区收到多个写入请求,则这些请求将串行执行,这个锁时必须的,无法进行优化,但仔细观察线程的调用栈,发现在锁的代码块出现了。最有可能的就是服务端与客户端端消息协议版本不一致,如果版本不一致,则需要在服务端重新偏移量,如果使用了压缩机制,则需要重新进行解压缩,然后计算位点,再进行压缩存储,性能消耗极大。,进行了zip压缩,一个压缩处在锁中,其执行性能注定低下,那在什么时候需要在服务端进行压缩呢?

2022-10-27 20:35:49 45

原创 kafka权限访问

9092只能用匿名用户访问,admin用户不能访问9092端口。admin用户必须用9093端口访问。

2022-10-27 20:28:41 295

原创 Kafka中offsets.retention.minutes和log.retention.minutes之间的区别

那么它们之前的差别是什么呢?首先让我们看看它们在官方文档中的定义名称描述类型默认值有效值重要性在删除日志文件之前保留日志文件的分钟数(以分钟为单位),优先级弱于。如果未设置,则使用log.retention.hours中的值intnull高主题偏移量日志文的保留时长(分钟)int1440[1,...]高。

2022-10-27 18:57:27 14

原创 详细总结Java堆栈内存、堆外内存、零拷贝浅析与代码实现

一、堆栈内存堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由JavaGC进行管理的内存区域,而栈内存则是线程内存。关于栈内存,这里不去细说。以Hotspot为例,堆内存的简要结构如下图所...

2022-10-24 11:25:56 30

原创 成功解决 /bin/sh: 1: source: not found

便可成功使用source命令~

2022-10-21 16:53:51 67

原创 excel向上取整

excel

2022-10-21 16:53:19 47

原创 Golang 高效实践之defer、panic、recover实践

我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑。但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃。Golang有没有一种异常捕获和恢复机制呢?这个就是本文要讲的panic和recover。其中recover要配合defer使用才能发挥出效果。文章介绍了defer、panic和recover的原理和用法,并且在最后给出了一些在实际应用的实践建议,不要滥用defer,注意defer搭配闭包时的一些特性。

2022-10-17 19:21:45 18

原创 Linux资源管理之cgroups简介

本文首先介绍了 cgroups 在内核中的实现方式,然后介绍了 cgroups 如何通过 VFS 把相关的功能暴露给用户,然后简单介绍了 cgroups 的使用方法,最后通过分析了几个 cgroups 在实践中的例子,进一步展示了 cgroups 的强大的精细化控制能力。笔者希望通过整篇文章的介绍,读者能够了解到 cgroups 能够完成什么样的功能,并且希望读者在使用 cgroups 的功能的时候,能够大体知道内核通过一种什么样的方式来实现这种功能。

2022-10-17 18:06:00 203

原创 强大的strace命令用法详解

当发现进程或服务异常时,我们可以通过strace来跟踪其系统调用,“看看它在干啥”,进而找到异常的原因。熟悉常用系统调用,能够更好地理解和使用strace。当然,万能的strace也不是真正的万能。当目标进程卡死在用户态时,strace就没有输出了。这个时候我们需要其他的跟踪手段,比如gdb/perf/SystemTap等。备注:1、perf原因kernel支持2、ftrace kernel支持可编程3、systemtap 功能强大,RedHat。

2022-10-17 17:36:34 96

原创 kafka项目经验之如何进行Kafka压力测试、如何计算Kafka分区数、如何确定Kaftka集群机器数量

用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈==(CPU,内存,网络IO)。参数解析:本例中一共写入10w条消息,吞吐量为1.45 MB/sec,每次写入的平均延迟为1718.17毫秒,最大的延迟为3564.00毫秒。Consumer的测试,如果这四个指标(IO,CPU,内存,网络)都不能改变,考虑。进入kafka的安装目录,执行下面的命令。进入kafka的安装目录,执行下面的命令。使用下面两个kafka自带的脚本。指定每次fetch的数据的大小。

2022-10-17 14:50:33 30

原创 excel如何拟合直线(怎样用excel拟合直线)

5、在右侧弹出的小窗口中选择“线性”,进度条往下拉,选择“显示公式”-“显示R平方值”就会显示拟合的方程。1、将数据按照X值在左列,Y值在右列输入电子表格,然后选中数据区域。3、在散点图中选择“带直线和数据标记的散点图”,就会出现一张直线图。2、在工具栏中选择“插入”---“图表”,选择图表中的散点图。4、右键单击该直线,在选项中选择“添加趋势线”

2022-10-17 14:34:38 354

原创 Kafka CPU使用率高排查思路及解决方案

b) Kafka配置中查看num.io.threads、num.network.threads、num.replica.fetchers配置,num.io.threads和num.network.threads配置一般建议磁盘个数的倍数,但不能超过CPU核数。c) 分区设置不合理:分区一般设置为节点个数的倍数,如果分区设置不合理,所有的生产和消费都集中在某个节点上,也可能导致CPU高。如果句柄数高,排查使用句柄数高的进程是否有句柄泄漏;3) top -H -p 进程pid 查看CPU使用率高。

2022-10-14 18:59:19 1007

原创 性能测试:jstat -gcuti命令分析

新new出来的对象会存储在 Eden(伊甸园)中,当这区域满了之后JVM会进行一次垃圾回收,在回收时把有用的对象存储在S1区,没用的就销毁此对象的内存空间,这过程即第一次YoungGC,如果S1区空间也满了后,同理会将有用的对象会放到S2区中,并释放S1空间,以上反复的回收即为YoungGC。因为正常情况下是每次GC后,S0区、S1区中的空间总有一个是会被完全清空(根据GC垃圾回收算法),因此S0 S1一直存在被占用时则回收不彻底,导致内存泄漏现象,随之时间拉长,甚至出现内存溢出(OOM)现象。

2022-10-13 10:08:25 177

原创 Linux系统网络流量负载情况的查询和案例分析

iftop命令常见用法如下。参数-i后跟的interface表示网络接口名,比如eth0、eth1等等。如果不通过-i参数指定接口名,则默认检测第一块网卡的使用情况。:iftop的流量显示单位是Mb,这里的b是比特(bit),不是字节(byte)。而ifstat显示的单位是KB中的B,也就是字节。1byte等于8bit。进入iftop界面后,可以通过按下相应的字母快捷按键,来对显示结果进行调整。显示结果主要字段说明。

2022-10-13 09:57:07 132

原创 markTopicIneligibleForDeletion什么时候被调用

版权声明:本文为CSDN博主「其实系一个须刨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/lianggx3/article/details/101324913。

2022-09-26 15:17:38 18

原创 Java程序员必备:jstack命令解析

jstack

2022-09-21 16:49:05 534

原创 Linux lsof 命令

lsof 并不是一个简单的命令,从其 man page 的长度就可以体会到这一点。从本文介绍的小 demo 入手或许可以让你忘记冗长的文档说明,一步步的开始使用并最终掌握这个命令。linux lsof命令详解。

2022-09-16 15:49:02 138

原创 一文读懂Kafka Connect核心概念

Kafka Connect 是一种用于在 Apache Kafka 和其他系统之间可扩展且可靠地流式传输数据的工具。它使快速定义将大量数据移入和移出 Kafka 的连接器变得简单。Kafka Connect 可以摄取整个数据库或从所有应用程序服务器收集指标到 Kafka 主题中,使数据可用于低延迟的流处理。导出作业可以将数据从 Kafka 主题传送到二级存储和查询系统或批处理系统进行离线分析。

2022-09-16 15:41:36 74

原创 golang源码分析:sarama kafka client(part I:生产者)

getBrokerProducer依赖于这个partitation的leader,发送消息都是发送到partation的leader,获取leader的方式是通过存储在kafka中的元数据得到的,后面会详细介绍。dispatcher这个协程,不断消费input里面的消息,然后发送给topicProducer的input chanel,这样我们发送消息的时候,值需要不断往peoducer的input里面发送就可以了。代码位于client.go中。第二个协程,就是做了构建请求,发起请求,传递返回结果三件事情。

2022-09-16 13:58:24 136

空空如也

空空如也

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

TA关注的人

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