![](https://img-blog.csdnimg.cn/2020051211420820.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kafka
文章平均质量分 61
Kafka
Geoffrey Turing
Engaged in Java RD,BigDataRD,SRE... Contribute to Apache Hadoop/Kafka/Pulsar/Doris community
展开
-
Kafka JMX指标&消费者积压等监控体系构建
针对于非kerberos环境非SSL环境的kafka version 0.11&2.5,其他版本有略微差异,没有大的改变一、kafka部署时添加将下面的jar包跟yaml配置文件都放在kafka的bin目录下1、jmx_prometheus_javaagent-0.15.0.jar下载这个jar包是prometheus 提供的 jmx_exporter ,作用是来收集 kafka 暴露的jmx指标。jar包可以与下面的yaml文件进行配合,从而自己修改指标名称大小写、name等格式的转换(原创 2022-01-12 17:23:16 · 7973 阅读 · 1 评论 -
Kafka启动报错
报错[2022-01-06 18:22:32,330] ERROR [KafkaServer id=1005] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)org.apache.kafka.common.errors.CorruptRecordException: Found record size 0 smaller than minimum record overhead原创 2022-01-07 15:46:55 · 2095 阅读 · 0 评论 -
kafka0.11版本消费报错Group coordinator is unavailable or invalid, will attempt rediscovery
报错消费单节点kafka要么消费很缓慢要么报错Group coordinator ip:9092 (id: 2147483647 rack: null) is unavailable or invalid, will attempt rediscovery重启节点也没用分析单节点情况下coordinator 压力太大了__consumer_offsets这个元主题的历史消息量分配不均衡有分区kb、M级别正常,有几个分区直接几十G,如果消费的主题在这些压力大的分区,就会消费阻塞因为这个元主原创 2021-09-29 10:21:50 · 10565 阅读 · 0 评论 -
Kafka管理工具对比
Kafka管理工具对比原创 2021-09-03 15:24:32 · 552 阅读 · 0 评论 -
kafka指定topic设置消息留存时间
背景单个主题消息量庞大,需要指定这个主题的消息留存时间缩小点执行命令./bin/kafka-configs.sh --bootstrap-server node1:9092 --entity-type topics --entity-name gaofengTest --alter --add-config retention.ms=259200000修改完等几分钟,这个主题的消息量就下来了...原创 2021-05-25 17:58:54 · 2611 阅读 · 2 评论 -
Flink发送Kafka报错
背景测试服FLink发送消息至kafka的topicA相比线上服来说,测试服这次是全量跑数,发的数据远大于线上服正在往topicA发的量,数量非常巨大报错[04:01:17:52:32:627] ERROR [kafka-producer-network-thread | producer-1] [] [] [] @@LoggingProducerListener@@ | Exception thrown when sending a message with key='null' and pa原创 2021-04-03 12:46:08 · 1255 阅读 · 0 评论 -
【生产者分析六】Kafka生产者Tips
1、生产者源码之一个batch什么条件下可以发送出去上面我们介绍了Sender线程发送那个消息的大概流程,接下来我们来分析一下一个batch的数据在什么情况下会发送出去?回顾发送消息的时候,生产者需要指定的相关参数retries : 重试的次数,默认为0linger.ms : 生产者在发送批次之前等待更多消息加入批次的时间,默认为0,表示不等待retry.backoff.ms:重试的时间间隔,默认100ms核心代码Sender类当中的run方法当中定义以下代码/*** *原创 2021-03-22 19:17:39 · 1739 阅读 · 1 评论 -
【生产者分析五】Sender线程运行流程初探
生产者源码之Sender线程运行流程初探前面已经介绍到了Sender线程,元数据就是通过Sender线程发送网络请求,获取到的。有了元数据之后,就可以实现把消息发送给kafka集群中,下面我们来分析下Sender线程运行流程Sender线程中的run方法核心流程分析void run(long now) { //todo: 1、获取元数据 // 因为这里采用场景驱动的方式,由于代码第一次进来,目前还没有获取到元数据。 所以这个Cluster对象中是没有元数据的原创 2021-03-22 18:14:48 · 451 阅读 · 0 评论 -
【生产者分析四】RecordAccumulator封装消息流程
1、RecordAccumulator封装消息流程初探下面我们来分析下生产者核心流程中RecordAccumulator是如何封装消息的核心代码KafkaProducer当中doSend方法定义以下内容/** * todo: 第七步:把消息放入Accumulator(32M的一个内存) * 然后由accumulator把消息封装成为一个批次一个批次的去发送。 */ RecordAccumulator.RecordAppendResult result = accumulato原创 2021-03-22 18:11:27 · 829 阅读 · 0 评论 -
【生产者分析三】Kafka分区器选择【剖析】
1、生产者源码之Producer分区器选择深度剖析前面我们已经获取到元数据了,接下来我们就可以计算一下,一条消息会发送给topic的哪一个分区中,这里就涉及到底层的分区策略,分区器的选择。核心代码/** * todo: 第三步:根据分区器选择消息应该发送的分区 * 根据元数据信息可以计算出消息应该发送到topic的哪一个分区中 */int partition = partition(record, serializedKey, serializedValue, cluster);原创 2021-03-22 17:53:55 · 398 阅读 · 0 评论 -
【生产者分析二】Producer加载元数据
1、Producer加载元数据深度剖析1.1、Producer加载元数据整体流程分析前面我们大概了解了Producer核心流程【初探】,接下来我们深入剖析下Producer加载元数据的核心细节回顾同步等待拉取元数据核心代码 /** * todo: 第一步:同步等待拉取元数据 * maxBlockTimeMs 最多能等待多久 默认是1分钟 */ ClusterAndWaitTime clusterAndWaitTime = waitOnMetadata(record.top原创 2021-03-22 17:50:46 · 970 阅读 · 0 评论 -
【生产者分析一】Kafka生产者流程【初探】
1、核心流程概览1、ProducerInterceptors是一个拦截器,对发送的数据进行拦截处理2、Serializer 对消息的key和value进行序列化3、通过使用分区器作用在每一条消息上,实现数据分发进行入到topic不同的分区中4、RecordAccumulator缓存消息,实现批量发送5、Sender从RecordAccumulator获取消息6、构建ClientRequest对象7、将ClientRequest交给 NetWorkClient准备发送8、NetWorkCli原创 2021-03-22 17:49:18 · 2838 阅读 · 0 评论 -
Kafka全部分区策略【四大类】
分区策略所谓分区策略是决定生产者将消息发送到哪个分区的算法。Kafka 为我们提供了默认的分区策略,同时它也支持你自定义分区策略。1、自定义分区策略如果要自定义分区策略,你需要显式地配置生产者端的参数partitioner.class。这个参数该怎么设定呢?方法很简单,在编写生产者程序时,你可以编写一个具体的类实现org.apache.kafka.clients.producer.Partitioner接口。这个接口也很简单,只定义了两个方法:partition()和close(),通常你只需要实现最原创 2021-03-22 14:56:36 · 1721 阅读 · 0 评论 -
kafka-console-consumer.sh使用2次grep管道无法提取消息
问题在使用kafka自带脚本消费时,想用grep关键词过滤出来想要的信息./kafka-console-consumer.sh \--bootstrap-server node1:9092,node2:9092,node3:9092 \--topic test \--from-beginning \--consumer-property group.id=gaofeng_test\ | grep "b786aba6f3a6" | grep 388aabd但是发现grep命令在这里有问题,原创 2021-03-18 19:46:17 · 2706 阅读 · 1 评论 -
Kafka开启kerberos后造成ISR为null且Leader为none
昨天社区中有位朋友晚上给我发了个新搭建的kerberosed kfk测试集群,遇到了个问题,抽空帮着看了下,解决方案如下1、环境ambari+HDP3.1.4kfk2.0kerberosed2、问题现象2.1、producer报错2.2、client.properties如下2.3、unavaliable-partition3、分析kerberos auth failed需要重新刷新kinit大量leader不可得,要么相关副本所在broker全挂,要么controlle原创 2021-01-15 17:57:40 · 1178 阅读 · 5 评论 -
kafka如何保证顺序读写
kafka如何保证顺序读写(一个分区有序,so,单分区,单consumer,不行的;需要N个内存队列放在消费者后面,业务处理前面)Kafka如何保证消息的顺序性1. 问题比如说我们建了一个 topic,有三个 partition。生产者在写的时候,其实可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。消费者从 partition 中取出来数据的时候,也一定原创 2020-08-31 16:26:08 · 4393 阅读 · 0 评论 -
kafka如何保证不丢失数据
kafka如何保证不丢失数据一般我们在用到这种消息中件的时候,肯定会考虑要怎样才能保证数据不丢失,在面试中也会问到相关的问题。但凡遇到这种问题,是指3个方面的数据不丢失,即:producer consumer 端数据不丢失 broker端数据不丢失下面我们分别从这三个方面来学习,kafka是如何保证数据不丢失的一.producer 生产端是如何保证数据不丢失的1.ack的配置策略acks = 0 生产者发送消息之后 不需要等待服务端的任何响应,它不管消息有没有发送成功,如果发送过程中遇到原创 2020-08-31 16:24:35 · 1901 阅读 · 3 评论 -
kafka消息积压怎么办
kafka消息积压怎么办(1)如果是Kafka消费能力不足,则可以考虑增加 topic 的 partition 的个数,同时提升消费者组的消费者数量,消费数 = 分区数 (二者缺一不可)(2)若是下游数据处理不及时,则提高每批次拉取的数量。批次拉取数量过少(拉取数据/处理时间 < 生产速度),使处理的数据小于生产的数据,也会造成数据积压。...原创 2020-08-31 16:19:36 · 5173 阅读 · 0 评论 -
kafka为什么用TCP/IP
kafka为什么用TCP/IPApache Kafka的所有通信都是基于TCP的,而不是于HTTP或其他协议的1 为什么采用TCP?(1)TCP拥有一些高级功能,如多路复用请求和同时轮询多个连接的能力。(2)很多编程语言的HTTP库功能相对的比较简陋。名词解释:多路复用请求:multiplexing request,是将两个或多个数据合并到底层—物理连接中的过程。TCP的多路复用请求会在一条物理连接上创建若干个虚拟连接,每个虚拟连接负责流转各自对应的数据流。严格讲:TCP并不能多路复用,只是提供原创 2020-08-31 16:18:59 · 2310 阅读 · 0 评论 -
Kafka为什么leader读写而follower复制呢
数据一致性 kafka 是保存副本 leader读写,follower 只备份 而 zookeeper是 leader 读写,follower负责读一、zookeeper 与kafka保持数据一致性的不同点:(1)zookeeper使用了ZAB(Zookeeper Atomic Broadcast)协议,保证了leader,follower的一致性,leader 负责数据的读写,而follower只负责数据的读,如果follower遇到写操作,会提交到leader;当leader宕机的话,使用 Fas原创 2020-08-31 16:18:06 · 1190 阅读 · 0 评论 -
聊聊Kafka的‘金手指’外挂
1、发现Kafka开挂听过ZeroMQ吗ZeroMQ完全没有任何服务器节点,也不会使用硬盘,按照道理说它应该比Kafka快。可是实际测试下来它的速度还是被Kafka“吊打”。Kafka使用磁盘文件存储还想快速?“一个用硬盘的比用内存的快”,这绝对违反常识;如果这种事情发生说明——它开挂了。没错,Kafka“开挂”实锤。2、Kafka的金手指——顺序写入因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最“讨厌”随机I/O,最喜欢顺序I/O。原创 2020-07-14 10:46:40 · 4719 阅读 · 21 评论 -
一文读懂Kafka零拷贝
broker 维护的消息日志本身就是一个文件目录,每个文件都由一系列以相同格式写入到磁盘的消息集合组成,这种写入格式被 producer 和 consumer 共用。保持这种通用格式可以对一些很重要的操作进行优化: 持久化日志块的网络传输。 现代的unix 操作系统提供了一个高度优化的编码方式,用于将数据从 pagecache (页缓存)转移到 socket 网络连接中;在 Linux 中系统调用 sendfile 做到这一点。为了理解 sendfile 的意义,了解原本数据从文件到套接字的常见数据传输路原创 2020-07-14 09:55:15 · 5035 阅读 · 10 评论 -
Kafka极客杂谈——摘自胡夕
1、topic参数覆盖问题Topic 级别参数会覆盖全局 Broker 参数的值,而每个 Topic 都能设置自己的参数值,这就是所谓的 Topic 级别参数。2、topic数据全局、局部留存在实际生产环境中,如果为所有 Topic 的数据都保存相当长的时间,这样做既不高效也无必要。更适当的做法是允许不同部门的 Topic 根据自身业务需要,设置自己的留存时间。如果只能设置全局 Broker 参数,那么势必要提取所有业务留存时间的最大值作为全局参数值,此时设置 Topic 级别参数把它覆盖,就是一个不原创 2020-07-08 18:10:05 · 2108 阅读 · 24 评论 -
千亿级数据量kafka集群性能调优实战总结
1、(千亿级kafka集群性能调优)集群信息一个kafka集群,40台broker,基于Ambari,hdp管理(ambari_v2.5,hdp_v2.6)10台broker配置5块3T盘30台broker配置12块6T盘每天所有生产端产生2000亿条左右的数据消费端有SparkStreaming,Flume等业务程序2、 第一次故障现象生产环境flume无法消费kafka,sink的文件为空。nifi中往kafka写消息报错ISR缺失严重3、第一次故障排查元数据主原创 2020-07-03 12:48:26 · 6646 阅读 · 16 评论 -
【源码分析】Kafka分区重分配/迁移(kafka-reassign-partitions.sh)
/** * This callback is invoked by the reassigned partitions listener. When an admin command initiates a partition * reassignment, it creates the /admin/reassign_partitions path that triggers the zookeeper listener. * Reassigning replicas for a par原创 2020-06-30 10:54:33 · 4141 阅读 · 57 评论 -
卸载ambari中kafka后安装Apache的kafka不能消费
故障现象背景集群规模较小,听说是本来ambari中kafka用的很正常,开发人员说flink与kafka版本不一致(具体指scala版本),然后就将HDP的kafka在ambari界面卸载了,最后安装的是apache对应版本的kafka问题更换kafka的“发行版”后,发现所有主题无法消费问题排查查看kafka元数据主题__consumer_offsets发现所有的副本所在brokerId格式为1001,1002格式(是HDPkafka默认的brokerId格式),所以担心之前没卸载干净并且原创 2020-06-19 11:33:43 · 432 阅读 · 0 评论 -
解决kafka ISR缺失严重导致消费异常的方法
解决kafka ISR缺失严重导致消费异常的方法故障现象生产环境flume无法消费kafka,sink的文件为空。nifi中往kafka写消息报错故障排查元数据主题__consumer_offsets正常对应无法消费的业务topic存在部分分区的ISR列表丢失2/3,且随着时间的推移,isr缺失的分区占比在增加且flume端的消费组一直在rebalance。尝试调整参数kafka.consumer.session.timeout.ms=30000ms—增大消费者连原创 2020-06-19 11:11:56 · 4643 阅读 · 1 评论 -
解决ISR丢失—— Kafka副本同步leader能力参数
replicas响应leader的最长等待时间,若是超过这个时间,就将replicas排除在管理之外replica.lag.time.max.ms = 10000如果relicas落后太多,将会认为此partition relicas已经失效。而一般情况下,因为网络延迟等原因,总会导致replicas中消息同步滞后。如果消息严重滞后,leader将认为此relicas网络延迟较大或者消息吞吐能力有限。在broker数量较少,或者网络不足的环境中,建议提高此值.(Kafka 0.9.0.0版本后移除.原创 2020-06-12 10:53:39 · 2870 阅读 · 0 评论 -
kafka集群扩容以及物理资源(broker)隔离
需求:要对于几个业务topic进行基于broker级别的物理资源隔离步骤1:Ambari2.7.x基于HDP3.x进行kafka集群扩容用于隔离的broker是若干台新机子在ambari界面–主机–add—kafka broker进行kafka的broker扩容2:登陆zk查看扩容机对应的broker idsh zkcli.shls /broker/idsget每一个broker id的值,查询新增的brokers 主机名对应的broker id,一般都是基于之前的broker id进行原创 2020-05-12 11:19:02 · 2719 阅读 · 14 评论 -
Kafka安全机制(一)
背景在0.9版本后,kafka增加了身份认证与权限控制两种安全服务身份认证身份认证顾名思义就是客户端与服务端连接时进行的身份认证。分为客户端与broker之间的连接认证broker之间的连接认证broker与zookeeper之间的连接认证目前支持SSL、SASL/kerberos、SASL/PLAIN这三种认证机制权限控制Kafka权限控制是可插拔的,它支持与外部授权服务进...原创 2020-04-18 23:20:34 · 1896 阅读 · 0 评论 -
kafka全操作精讲
kafka基本操作如下是在${KAFKA_HOME}/bin/目录下所有kafka自带脚本启动关闭kafka集群我用的Ambari进行管理,如果是自己搭建的全分布集群,则可以用如下kafka-cluster-start.sh或kafka-cluster-stop.sh脚本进行所有brokers启动关闭,实际上就是循环所有broker执行kafka-server-start/stop.sh...原创 2020-04-15 17:19:27 · 7317 阅读 · 45 评论 -
kafka重要参数总结
num.partitions=1#全局分区设置 默认1offsets.topic.num.partitions=50#__consumer_offsets分区设置 默认50default.replication.factor=1#全局副本设置 默认1offsets.topic.replication.factor=3#__consumer_offsets...原创 2020-04-15 16:19:50 · 4471 阅读 · 2 评论 -
Kafka消费者、Zookeeper管理kafka元数据总结
kafka的消费者以pull的方式拉取消息——————————————————————————————————创建消费者时,若不指定group.id,则该消费者属于默认消费组——————————————————————————————————group.id全局唯一——————————————————————————————————同一个消费组下的消费者在消费消息时是互斥的—————...原创 2020-04-15 15:41:48 · 1837 阅读 · 2 评论 -
kafka发送消息失败错误
问题在模拟进行kafka的生产者发送消息时,发送完消息消费者迟迟接收不到。等到了6000ms超时时间时,生产者端报超时 ERROR Error when sending message to topic gaofengTest2 with key: null, value: 4 bytes with error: (org.apache.kafka.clients.producer.inte...原创 2019-12-30 18:22:12 · 6807 阅读 · 2 评论