仅个人实践中所遇到的问题,若有不对的,欢迎交流!


一、场景描述

  kafka集群中有几台突然挂了,后台日志显示设备空间满了,消息无法写入__consumer_offsets topic的分区中了。查看kafka数据目录下各个文件的大小,发现__consumer_offsets topic分区中有一个分区__consumer_offsets-5数据很多,多达1T,而其他分区只有4KB,相差巨大。且__consumer_offsets-5中保留了一年多的数据。什么情况?不应该自动清除吗?

二、问题分析

  1)__consumer_offsets分区中数据量相差这么大?

    __consumer_offsets topic的分区中存放的是consumer的offset等信息,其存放机制是用消费组id的hash值对分区数取模得到的。而我们只有一个消费组,所以会导致__consumer_offsets topic中的数据都写入一个分区。

  2)__consumer_offsets-5保留的一年多数据,为什么没有被清理?不是已经设置了log.retention.hours、log.retention.bytes这些参数了吗?

    首先说一点,__consumer_offsets的cleanup.policy策略是compact,而我们新建topic的清理策略默认是deleted,前者可以使用--describe 加上--topic  __consumer_offsets 可以看到,而后者可以在server.properties上可以看到。参数log.cleaner.enable参数对清理策略为compact起作用,且不是通过压缩(compact)文件达到减少数据的目的,通过测试,我们发现当文件属性不满足log.retention.hours、log.retention.bytes其中任何一项时,.log的数据文件文件就会被删除。当然也不是直接删除,是先将文件标记为-deleted,然后被清除。因为测试的时候被标记为-deleted后,再次执行ll命令时,文件已经被删除了,不知道删除时间间隔是否和参数log.retention.check.interval.ms有关,若有大佬知道欢迎留言分享。

    知道文件清理规则后,检查log.cleaner.enable设置,为false,故将其改为true即可。

三、测试过程

  修改参数log.segment.bytes的大小为1M,使得__consumer_offsets topic的分区中.log文件大小保留为1M;为了尽快确定log.cleaner.enable改为true是否会减小__consumer_offsets topic的分区中数据量的大小,需要修改触发删除的阈值。为减小阈值,修改log.retention.bytes为2M。但是在实际测试中我们发现当__consumer_offsets topic的分区中的.log大小为50M的时候还是没有触发删除。使用以下命令查看__consumer_offsets topic时发现,其默认的configure :segment.bytes大小为104857600,即为100M。

 kafka-topics --decribe --zookeeper localhost:/kafka --topic __consumer_offsets

  通过查看kafka官网上有关segment bytes配置说明,发现删除时是以一个文件执行的,这个参数控制着文件大小。原文如下:

This configuration controls the segment file size for the log. Retention and cleaning is always done a file at a time so a larger segment size means fewer files but less granular control over retention.

  使用命令将这个segment.bytes改为10M,发现__consumer_offsets-5分区的数据很快就变为400+KB了。修改命令如下:

 kafka-topics --zookeeper localhost:/kafka --alter --topic __consumer_offsets --config segment.bytes=

四、应急策略

  当时因为是生产环境出现问题,来不及分析,要尽快将生产恢复正常,只能临时将日志等信息保留下来,以待后续分析。上述的分析还是自己后来查找资料知道的。当时采取的策略如下:

  停止程序;增加磁盘;删除topic;新建topic;启动程序;

  耗时近一个半小时,消费正常。这个步骤肯定是不行的,但是当时不是很懂,所以采取了临时的策略,欢迎大佬分享自己遇到这种问题时采取的措施!    

五、参考文献

  1)https://support.huawei.com/enterprise/zh/knowledge/KB1000676043/

  2)https://www.sohu.com/a/136881236_487514

    

kafka问题集(二):__consumer_offsets topic的分区中有一个分区数据很多,多达1T的更多相关文章

  1. kafka问题集(三)ISR缺失

    仅个人实践所得,若是有误,欢迎指出. 一.场景 kafka集群中某一节点(N-10)的CPU利用率大于整个集群的平均水平,且达到报警值.使用top命令后台查看时发现是kafka服务导致CPU利用率高. ...

  2. Linux磁盘及文件系统(二)Linux下磁盘命名和分区

    在为主机添加硬盘之前,首先需要了解Linux系统下对硬盘和分区的命令方法 一.磁盘命名 Linux下对SCSI和SATA设备是以sd命名的,第一个SCSI设备是sda,第二个是sdb....以此类推. ...

  3. kafka入门(二)分区和group

    topic 在kafka中消息是按照topic进行分类的:每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic parition 一个topic可以配置几个parition,每一个分区 ...

  4. Kafka/Zookeeper集群的实现(二)

    [root@kafkazk1 ~]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12. ...

  5. 解决spark streaming集成kafka时只能读topic的其中一个分区数据的问题

    1. 问题描述 我创建了一个名称为myTest的topic,该topic有三个分区,在我的应用中spark streaming以direct方式连接kakfa,但是发现只能消费一个分区的数据,多次更换 ...

  6. Kafka 入门(二)--数据日志、副本机制和消费策略

    一.Kafka 数据日志 1.主题 Topic Topic 是逻辑概念. 主题类似于分类,也可以理解为一个消息的集合.每一条发送到 Kafka 的消息都会带上一个主题信息,表明属于哪个主题. Kafk ...

  7. kafka学习(二)kafka工作流程分析

    一.发送数据 follower的同步流程 PS:Producer在写入数据的时候永远的找leader,不会直接将数据写入follower PS:消息写入leader后,follower是主动的去lea ...

  8. Kafka 跨集群同步方案(转)

    来自:http://tangzhaohui.net/524 Kafka 跨集群同步方案——Kafka内置的MirrorMaker工具 该方案解决Kafka跨集群同步.创建Kafka集群镜像等相关问题, ...

  9. kafka学习(二)-------- 什么是Kafka

    通过Kafka的快速入门 https://www.cnblogs.com/tree1123/p/11150927.html 能了解到Kafka的基本部署,使用,但他和其他的消息中间件有什么不同呢? K ...

随机推荐

  1. CSS3实现垂直居中的新方法

    测试地址: http://codepen.io/anon/pen/PZKZqe 兼容性:

  2. 【python 2.7】获取外部参数

    import sys res_0 = sys.argv[0] res_1 = sys.argv[1] res_2 = sys.argv[2] print res_0 print res_1 print ...

  3. php学习--变量和数据类型

    PHP变量 变量 ​ 程序执行期间,可以变化的量即为变量. 声明变量 以美元$ 符号声明 注意:(PHP严格区分大小写) 变量名称以 字母.或下划线开始,后面跟上数字/字母/下划线,不能包含特殊字符 ...

  4. 【RL系列】Multi-Armed Bandit笔记补充(二)

    本篇的主题是对Upper Conference Bound(UCB)策略进行一个理论上的解释补充,主要探讨UCB方法的由来与相关公式的推导. UCB是一种动作选择策略,主要用来解决epsilon-gr ...

  5. tee命令详解

    基础命令学习目录首页 参考:http://man.linuxde.net/tee tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin.简单的说就是把数据重 ...

  6. Beta冲刺第二周王者荣耀交流协会第五次会议

    1.立会照片 成员:王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王磊 2.时间跨度: 2017年11月21日 15:00 — 15:17,总计17分钟. 3.地点: 一食堂 ...

  7. Task 6.3 场景调研

    1.背景: (1)典型用户:信息1303班王银凤 (2)用户的需求/迫切需要解决的问题:她们宿舍上网一直使用的是外网,一年400的一种“套餐”.这种是按小时计算的,在校的时间平均下来一天可以用7 . ...

  8. 《 Spring1之第二次站立会议(重发)》

    < 第二次站立会议(重发)> 昨天,我把找到的代码和协议资料等相关资料在团队里做了相应的汇报: 今天,我对自己找到的代码进行了相关的了解后,把它们在编译环境中进行了编译以及接着对代码进行逐 ...

  9. HDU 4026 Unlock the Cell Phone 状压dp(类似TSP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4026 Unlock the Cell Phone Time Limit: 6000/3000 MS ...

  10. 第一次spring冲刺第3、4天

    11月14至15日 因为忙于项目的谈论与探究,以及周末的活动变动,使得博客没有时间提交上去,这里补交. 这两天,主要是应对于市场的探究做谈论,我们主要面对什么类型的客户,以及他们最需要的是什么等话题做 ...