![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
kafka
文章平均质量分 76
大叶子不小
这个作者很懒,什么都没留下…
展开
-
生产故障|Kafka ISR频繁伸缩引发性能急剧下降
本文是笔者双十一系列第二弹,源于一个双十一期间一个让笔者猝不及防的生产故障,本文将详细剖析Kafka的副本机制,以及ISR频繁变更(扩张与伸缩)为什么会导致集群不可用。原创 2023-02-15 18:01:57 · 627 阅读 · 0 评论 -
Kafka 批量增加 Topic 副本数
网上没找到合适的脚本,于是自己写了个。原创 2023-01-05 19:21:47 · 248 阅读 · 0 评论 -
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 · 765 阅读 · 0 评论 -
kafka知识点
某一时刻,在主节点和从节点中 A 数据的值都为 X, 之后将主节点中 A 的值修改为 Y,那么在这个变更通知到从节点之前,应用读取从节点中的 A 数据的值并不为最新的 Y,由此便产生了数据不一致的问题。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现CPU的零参与,彻底消除 CPU 在这方面的负载。Follower副本只是采用拉(PULL)的方式,被动地同步Leader副本中的数据,并且在Leader副本所在的Broker宕机后,随时准备竞选Leader副本。原创 2022-11-01 16:18:26 · 937 阅读 · 0 评论 -
终于知道Kafka为什么这么快了!
又由于顺序写入的原因,所以 Kafka 采用各种删除策略删除数据的时候,并非通过使用“读 - 写”模式去修改文件,而是将 Partition 分为多个 Segment,每个 Segment 对应一个物理文件,通过删除整个文件的方式去删除 Partition 内的数据。传统的 Linux 系统中,标准的 I/O 接口(例如read,write)都是基于数据拷贝操作的,即 I/O 操作会导致数据在内核地址空间的缓冲区和用户地址空间的缓冲区之间进行拷贝,所以标准 I/O 也被称作缓存 I/O。原创 2022-11-01 16:07:53 · 299 阅读 · 0 评论 -
深入理解Kafka服务端之索引文件及mmap内存映射
虽然写数据时偏移量索引文件和时间戳索引文件会同时写入一个索引项,但是两个索引项的相对偏移量不一定是一样的,这是因为:生产者生产消息时可以指定时间戳,导致一个批次中的消息,偏移量最大的对应的时间戳不一定最大,而时间戳索引文件中保存的是一个批次中最大的时间戳及对应消息的相对偏移量。对应的消息时, 需要配合偏移量索引文件进行查找。综上,对于active日志段,不管索引项具体有多少,都先生成10M的索引文件(包括偏移量索引文件和时间戳索引文件)来存储索引,当滚动生成新的日志段时,会将这个索引文件调整为实际大小。原创 2022-11-01 16:06:57 · 2015 阅读 · 0 评论 -
Kafka源码解析之内存池原理
Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。原创 2022-10-31 16:14:26 · 373 阅读 · 0 评论 -
Kafka源码解析之内存池原理
Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。原创 2022-10-31 16:13:21 · 95 阅读 · 0 评论 -
Kafka源码解析之内存池原理
Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。原创 2022-10-31 16:08:52 · 162 阅读 · 0 评论 -
Kafka源码解析之内存池原理
Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。原创 2022-10-31 16:04:06 · 143 阅读 · 0 评论 -
Kafka源码解析之内存池原理
Kafka发送消息的流程如上所示,待发送的消息封装成一个个的批次对象RecordBatch,然后该批次对象被放到对应的Deque队列中,这里每个topic的每个分区对应一个Deque队列。如果每次都创建一个新的RecordBatch对象,用完之后通过GC回收,那么在Kafka高吞吐的场景下,势必会创建大量的RecordBatch对象,增加GC的频率,而进行GC时对应的STW时间就会增加,从而使吞吐量降低。判断申请的内存是否正好等于内存池中一个批次的大小,且内存池中有ByteBuffer对象。原创 2022-10-31 16:00:15 · 82 阅读 · 0 评论 -
Kafka源码分析系列-目录(收藏关注不迷路)
Kafka源码分析系列-目录(收藏关注不迷路) - 知乎原创 2022-10-31 15:58:25 · 201 阅读 · 0 评论 -
NO1-Kafka如何通过网络接收/发送请求
Kafka支持两种类型的请求:data-plane,control-planeKafkaRequestHandlerPool里面有8个KafkaRequestHandlerSocketServer会开启Acceptor线程和Processor线程,Acceptor线程将新连接入队,Processor线程获取新连接,注入新连接到selector上。然后执行poll方法读取连接的数据,读取到数据之后会调用requestChannel.sendRequest(req)。原创 2022-10-28 15:38:44 · 1425 阅读 · 0 评论 -
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 · 1454 阅读 · 1 评论 -
Kafka中时间轮算法的使用
Kafka心跳包的处理流程如下图所示:KafkaConsume主动发送心跳包 消费者会以3s的频率向服务端发送心跳包,服务端对应的入口为 KafkaApis的handleHeartbeatRequest方法。消费者加入消费组 在消费端重平衡过程中,客户端主动向其组协调器发起Join_Group(加入消费组)时,组协调器会认为收到一个有效的心跳包,服务端对应的处理入口:KafkaApis的handleJoinGroup方法。原创 2023-05-16 11:56:00 · 765 阅读 · 0 评论 -
性能调优|生产环境kafka集群400W/tps为啥就扛不住了?
通过阅读源码,这段代码是分区Leader在追加数据时为了保证写入分区时数据的完整性,对分区进行的加锁,即如果对同一个分区收到多个写入请求,则这些请求将串行执行,这个锁时必须的,无法进行优化,但仔细观察线程的调用栈,发现在锁的代码块出现了。最有可能的就是服务端与客户端端消息协议版本不一致,如果版本不一致,则需要在服务端重新偏移量,如果使用了压缩机制,则需要重新进行解压缩,然后计算位点,再进行压缩存储,性能消耗极大。,进行了zip压缩,一个压缩处在锁中,其执行性能注定低下,那在什么时候需要在服务端进行压缩呢?原创 2022-10-27 20:35:49 · 303 阅读 · 0 评论 -
kafka权限访问
9092只能用匿名用户访问,admin用户不能访问9092端口。admin用户必须用9093端口访问。原创 2022-10-27 20:28:41 · 687 阅读 · 0 评论 -
Kafka中offsets.retention.minutes和log.retention.minutes之间的区别
那么它们之前的差别是什么呢?首先让我们看看它们在官方文档中的定义名称描述类型默认值有效值重要性在删除日志文件之前保留日志文件的分钟数(以分钟为单位),优先级弱于。如果未设置,则使用log.retention.hours中的值intnull高主题偏移量日志文的保留时长(分钟)int1440[1,...]高。原创 2022-10-27 18:57:27 · 197 阅读 · 0 评论 -
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 · 375 阅读 · 0 评论 -
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 · 4171 阅读 · 0 评论 -
markTopicIneligibleForDeletion什么时候被调用
版权声明:本文为CSDN博主「其实系一个须刨」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/lianggx3/article/details/101324913。原创 2022-09-26 15:17:38 · 73 阅读 · 0 评论 -
一文读懂Kafka Connect核心概念
Kafka Connect 是一种用于在 Apache Kafka 和其他系统之间可扩展且可靠地流式传输数据的工具。它使快速定义将大量数据移入和移出 Kafka 的连接器变得简单。Kafka Connect 可以摄取整个数据库或从所有应用程序服务器收集指标到 Kafka 主题中,使数据可用于低延迟的流处理。导出作业可以将数据从 Kafka 主题传送到二级存储和查询系统或批处理系统进行离线分析。原创 2022-09-16 15:41:36 · 842 阅读 · 0 评论 -
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 · 565 阅读 · 0 评论 -
kafka发送消息分区选择策略详解
链接:https://juejin.cn/post/7035413272786370573。缺点:可能会产生数据倾斜 —— 取决于数据中key的分布,以及使用的hash算法。优点:消息的分区选择逻辑简单。缺点:负载均衡能力一般,也无法保证消息的有序性。商业转载请联系作者获得授权,非商业转载请注明出处。优点:可以保证相同key的消息被发送到相同的分区,因此可以。,可以保证消息被平均分配到所有分区上。轮询策略(默认分区策略)原创 2022-09-15 17:07:40 · 1089 阅读 · 0 评论 -
新浪微博从 Kafka 到 Pulsar 的演变
上图是一个两节点的 KoP 集群,客户端生产的 topic 的分区 0,位于 broker1 中。客户端的引导地址是 broker1 和 broker2。现在客户端要发送元数据请求给 broker2,broker2 会响应 metadata response。在 KoP 之前的处理逻辑中复用了 Topic lookup 机制,broker2 返回的 response 中不会包含自身的信息,只有分区所在的 broker1 的信息。然后客户端会向 broker1 分区的 leader 节点发送生产者请求。原创 2022-09-15 16:16:35 · 848 阅读 · 0 评论 -
KoP 正式开源:在 Apache Pulsar 上支持原生 Kafka 协议
Apache Pulsar 是一个事件流平台。最初,Apache Pulsar 就采用云原生、分层分片的架构。该架构将服务和存储分离开来,使系统实现更友好的容器化。Pulsar 的云原生架构具备强扩展性、高一致性和高弹性,使公司能通过实时数据解决方案扩展业务。自 2016 年开源以来,Pulsar 已得到广泛采用,并于 2018 年成为 Apache 顶级项目。原创 2022-09-15 16:14:45 · 982 阅读 · 0 评论 -
帅呆了!Kafka移除了Zookeeper!
普天同庆!最新版的Kafka 2.8.0,移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理。很好很好,终于有点质的改变了。一听到KRaft,我们就想到了Raft协议。Raft协议是当今最流行的分布式协调算法,Etcd、Consul等系统的基础,就来自于此。现在Kafka也有了。由于这个功能太新了,所以2.8.0版本默认还是要用ZooKeeper的,但并不妨碍我们尝尝鲜。另外,不要太激动了,据官方声称有些功能还不是太完善,所以不要把它用在线上。原创 2022-09-15 16:14:06 · 3498 阅读 · 1 评论 -
go saram 消费者调用逻辑
业务层:NewConsumer(client.mBrokers, group, topic, config)cluster-comsuer.go构造Consumer:consumer, err := sarama.NewConsumerFromClient(client.Client)c.client.RefreshCoordinator(groupID)//获取组协调者起循环for {c.nextTick}nextTick:重平衡->订阅主题->fetchOf原创 2021-08-18 11:09:27 · 303 阅读 · 0 评论 -
Kafka为什么吞吐量大、速度快?
https://blog.csdn.net/kzadmxz/article/details/101576401 Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。 Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。 但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单...原创 2021-07-22 16:19:26 · 106 阅读 · 0 评论 -
Kafka生产者:写消息到Kafka
https://blog.csdn.net/zhangMY12138/article/details/88559173本章我们将会讨论Kafka生产者是如何发送消息到Kafka的。Kafka项目有一个生产者客户端,我们可以通过这个客户端的API来发送消息。概要当我们发送消息之前,先问几个问题:每条消息都是很关键且不能容忍丢失么?偶尔重复消息可以么?我们关注的是消息延迟还是写入消息的吞吐量?举个例子,有一个信用卡交易处理系统,当交易发生时会发送一条消息到Kafka,另一个服务来读取消息并根据规则原创 2021-07-22 15:06:29 · 546 阅读 · 0 评论 -
彻底搞懂 Kafka 消息大小相关参数设置的规则
https://zhuanlan.zhihu.com/p/142139663前段时间接到用户要求,调整某个主题在 Kafka 集群消息大小为 4M。根据 Kafka 消息大小规则设定,生产端自行将 max.request.size 调整为 4M 大小,Kafka 集群为该主题设置主题级别参数 max.message.bytes 的大小为 4M。以上是针对 Kafka 2.2.x 版本的设置,需要注意的是,在某些旧版本当中,还需要调整相关关联参数,比如 replica.fetch.max.byte原创 2021-07-21 16:26:56 · 8652 阅读 · 2 评论 -
kafka运行后添加多个数据目录
kafka集群中有些服务器磁盘IO util很高导致机器load居高不下,想把这些机器的partition数据文件夹分到多个挂载不同磁盘的目录上降低单个磁盘的IO。主要有两种方法: 删除当前的数据文件夹下所有内容 重新配置server.properties中log.dirs参数,添加多个目录,逗号隔开,重启kafka。该操作会删除掉该机器所有数据,重启后该节点会去其他kafka节点找寻replication并拉取,新的数据会写入到配置的多个目录中。即,该方法适合于GB级别的数据量,如果数据量较大,节原创 2021-07-01 19:06:49 · 927 阅读 · 1 评论 -
消费后不提交offset情况的分析总结
消费者在消费消息的过程中,配置参数设置为不自动提交offset,在消费完数据之后如果不手动提交offset,那么在程序中和kafak中的数据会如何被处理呢?1. 如果在消费kafka的数据过程中,一直没有提交offset,那么在此程序运行的过程中它不会重复消费。但是如果重启之后,就会重复消费之前没有提交offset的数据。2. 如果在消费的过程中有几条或者一批数据数据没有提交offset,后面其他的消息消费后正常提交offset,那么服务端会更新为消费后最新的offset,不会重新消费,就算重启程序原创 2021-05-28 15:58:04 · 1998 阅读 · 2 评论 -
kafka监控指标
https://docs.confluent.io/platform/current/kafka/monitoring.htmlhttps://kafka.apache.org/documentation/kafka.network:type=RequestMetrics,name=TotalTimeMs,request={Produce|FetchConsumer|FetchFollower}Total time in ms to serve the specified request.k原创 2021-05-27 16:38:24 · 515 阅读 · 0 评论 -
kafka的advertised.host.name参数 外网访问配置
kafka的server.properties文件```host.name```开始只绑定在了内部IP上,对外网卡无法访问。把值设置为空的话会kafka监听端口在所有的网卡上绑定。但是在外网访问时,客户端又遇到了```java.nio.channels.ClosedChannelException```异常信息,server端用tcpdump分析的时候发现客户端有传递kafka所在机器的机器名过来。在client里断点跟踪一下发现是findLeader的时候返回的元信息是机器名而不是IP。客户端无法原创 2021-05-25 17:56:32 · 2259 阅读 · 0 评论 -
在配置文件中对它们进行注释时,Kafka log.flush.interval.messages和log.flush.interval.ms的缺省值
http://kafka.apache.org/documentation.html#configurationlog.flush.interval.messages = Long.MaxValue log.flush.interval.ms = Long.MaxValue原创 2021-05-14 15:38:21 · 1229 阅读 · 0 评论 -
Kafka解析之失效副本
https://blog.csdn.net/u013256816/article/details/78851989简介Kafka从0.8.x版本开始引入副本机制,这样可以极大的提高集群的可靠性和稳定性。不过这也使得Kafka变得更加复杂起来,失效副本就是所要面临的一个难题。通常情况下,Kafka中的每个分区(partition)都会分配多个副本(replica),具体的副本数量由Broker级别参数default.replication.factor(默认大小为1)指定,也可以在创建topic的时候通原创 2021-05-11 14:50:04 · 342 阅读 · 0 评论 -
0.10.1版本如何删除consumer的group和重置offset
新版本的kafka,groupid的信息是当成主题存储的在__consumer_offsets中的,所以7天后(默认),会自动帮你清理的原创 2021-05-11 11:36:21 · 369 阅读 · 0 评论 -
一次CPU sys上涨引发对kafka PageCache的思考
1.CPU sys 上涨背景配置 机型 A 机型 B CPU 48C 48C MEM 8*32G 12*16G DATA DISK 12*960G SSD 12*4T SSD 线上某个kafka集群由于种种原因,从 24 * 机型 A 置换迁移为 12 * 机型 B。从集群总资源维度看,排除其他客观因素,置换后,CPU总核数少了一半,使用率上升其实也是预期之内的。事实上置换后,集群CPU使用率确实也由原有的 20%提升至 40%,上升了约原创 2021-05-10 18:52:31 · 234 阅读 · 0 评论 -
Coordinator与offset管理和Consumer Rebalance
1、Consumer与Consumer Groupconsumer group是kafka提供的可扩展且具有容错性的消费者机制。组内可以有多个消费者或消费者实例(consumer instance),它们共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费订阅主题(subscribed topics)的所有分区(partition)。consumer group下可以有一个或多个consumer instance,consumer instance可以是一个进程,也可以是一个线程原创 2021-05-10 18:12:58 · 279 阅读 · 0 评论