由于项目原因,最近经常碰到Kafka消息队列拥堵的情况。碰到这种情况为了不影响在线系统的正常使用,需要大家手动的清理Kafka Log。但是清理Kafka Log又不能单纯的去删除中间环节产生的日志,中间关联的很多东西需要手动同时去清理,否则可能会导致删除后客户端无法消费的情况。

在介绍手动删除操作之前,先简单的介绍一下Kafka消费Offset原理。

一、Kafka消费Offset

在通过Client端消费Kafka中的消息时,消费的消息会同时在Zookeeper和Kafka Log中保存,如上图红线所示。

当手动删除Kafka某一分片上的消息日志时,如上图蓝线所示,此是只是将Kafka Log中的信息清0了,但是Zookeeper中的Partition和Offset数据依然会记录。当重新启动Kafka后,我们会发现如下二种情况:

A、客户端无法正常用消费;

B、在使用Kafka Consumer Offset  Monitor工具进行Kafka监控时会发现Lag(还有多少消息数未读取(Lag=logSize-Offset))为负数;其中此种情况的删除操作需要我们重点关注,后面我们也会详细介绍其对应的操作步骤。

一般正常情况,如果想让Kafka客户端正常消费,那么需要Zookeeper和Kafka Log中的记录保持如上图黄色所示。

Kafka具体消费原理可以参见:http://blog.xiaoxiaomo.com/2016/05/14/Kafka-Consumer%E6%B6%88%E8%B4%B9%E8%80%85/

二、Kafka消息日志清除

操作步骤主要包括:

1、停止Kafka运行;

2、删除Kafka消息日志;

3、修改ZK的偏移量;

4、重启Kafka;

上述步骤重点介绍其中的关键步骤。

在进行第2步:删除Kafka消息日志时,进入Kafka消息日志路径下,使用du -sh * 检查磁盘占用比较大的目录,然后删除此目录;

在进行第3步:修改ZK的偏移量时,进入ZK的安装目录下,运行./zkCli.sh -server (中间以,分割),如果不带server默认修改的为本机。

示例如下:

A.运行./zkCli.sh -server AAA:2181,BBB:2181,CCC:2181

B.在ZK上运行ls /consumers/对应的分组/offset/对应的topic,就可以看到此topic下的所有分区了;

通过get /consumers/对应的分组/offset/对应的topic/对应的分区号,可以查询到该分区上记录的offset;

通过set /consumers/对应的分组/offset/对应的topic/对应的分区号 修改后的值(一般为0),即可完成对offset的修改;

、重建Topic

    操作步骤主要包括如下:

1、删除Topic;

2、删除log日志;

3、删除ZK中的Topic记录

第一步:删除Topic

运行./kafka-topics.sh -delete -zookeeper [zookeeper server] -topic [topic name];如果kafka启动时加载的配置文件server.properties没有配置delete.topic.enable = true,那么此时的删除并不是真正的删除。而只是把topic标记为:marked for deletion,此时就需要执行第3步的操作;

第三步:删除ZK中的Topic记录

示例如下:

A.运行./zkCli.sh -server AAA:2181,BBB:2181,CCC:2181

B.进入/admin/delete_topics目录下,找到删除的topic,删除对应的信息。

四、常用命令

A.查看Kafka中的消息

1
2
./kafka-run-class.sh kafka.tools.DumpLogSegments -print-data-log -files /data01/middle/kafka-logs/00000002154.log >>aa.txt
find /dataa01 -mtime 0 -name *.log |xargs /kafka-run-class.sh kafka.tools.DumpLogSegments -print-data-log -files /data01/middle/kafka-logs/00000002154.log >>aa.txt

0代表当天;-1代表昨天

转 kafka 清理数据的更多相关文章

  1. kafka清理数据日志

    背景问题: 使用kafka的路上踩过不少坑,其中一个就是在测试环境使用kafka一阵子以后,发现其日志目录变的很大,占了磁盘很大空间,定位到指定目录下发现其中一个系统自动创建的 topic,__con ...

  2. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  3. 【Kafka】《Kafka权威指南》——从Kafka读取数据

    应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 . 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法.如果不先理解 这些概念 ...

  4. 第1节 kafka消息队列:11、kafka的数据不丢失机制,以及kafka-manager监控工具的使用;12、课程总结

    12.kafka如何保证数据的不丢失 12.1生产者如何保证数据的不丢失 kafka的ack机制:在kafka发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够被收到 如果是同步模 ...

  5. 【原创】开发Kafka通用数据平台中间件

    开发Kafka通用数据平台中间件 (含本次项目全部代码及资源) 目录: 一. Kafka概述 二. Kafka启动命令 三.我们为什么使用Kafka 四. Kafka数据平台中间件设计及代码解析 五. ...

  6. Kafka消费者-从Kafka读取数据

    (1)Customer和Customer Group (1)两种常用的消息模型 队列模型(queuing)和发布-订阅模型(publish-subscribe). 队列的处理方式是一组消费者从服务器读 ...

  7. kafka全部数据清空与某一topic数据清空

    1. Kafka全部数据清空 kafka全部数据清空的步骤为: 停止每台机器上的kafka: 删除kafka存储目录(server.properties文件log.dirs配置,默认为“/tmp/ka ...

  8. 【转】解决Maxwell发送Kafka消息数据倾斜问题

    最近用Maxwell解析MySQL的Binlog,发送到Kafka进行处理,测试的时候发现一个问题,就是Kafka的Offset严重倾斜,三个partition,其中一个的offset已经快200万了 ...

  9. Kafka权威指南 读书笔记之(三)Kafka 生产者一一向 Kafka 写入数据

    不管是把 Kafka 作为消息队列.消息总线还是数据存储平台来使用 ,总是需要有一个可以往 Kafka 写入数据的生产者和一个从 Kafka 读取数据的消费者,或者一个兼具两种角色的应用程序. 开发者 ...

随机推荐

  1. Windows7安装UBUNTU虚拟机

    1.下载虚拟机:http://www.orsoon.com/Soft/12192.html 2.下载UBUNTU10.04:http://releases.ubuntu.com/lucid/ 3.安装 ...

  2. spring + mybatis合集

    一.Spring 1. IoC 什么是IoC: 跟我一起学Spring 3(4)–深入理解IoC(控制反转)和DI(依赖注入) Spring中IoC的优点与缺点 spring Ioc 实践 IoC如何 ...

  3. XML与JSON使用区别

    一:XML XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". XML 文档形成一种树结构 XML 文档必须包含根元素.该元素是所有其他元素的 ...

  4. Linux下找不到动态链接库(转)

    1.生成静态库 生成静态库使用ar工具,其实ar是archive的意思 $ar cqs libhello.a hello.o 2.生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: ...

  5. Java 线程池之FixedThreadPool(Java代码实战-003)

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  6. 配置阿里云Docker镜像加速仓库

    1.首先要有个阿里云的账号 2.访问:https://cr.console.aliyun.com 3.登陆后可看到: 我的加速地址:https://g65zw8cl.mirror.aliyuncs.c ...

  7. FTP下载工具

    开源的FTP下载工具,FTP搬运工.... 01.FileZilla_3.21.0_win64 官方地址: https://filezilla-project.org/ 下载地址: http://pa ...

  8. oracle初始化化表空间用户权限

    oracle单实例安装完毕,需要初始化表空间.用户.等信息.不积跬步,何以至千里! 用sys账户登录oracle数据库,以此来完成所有操作! 01.创建临时表空间 create temporary t ...

  9. 【laravel5.4】php artisan 常用命令

        路由缓存:/www/wd***/php/bin/php artisan route:cache 查看全部路由并输出到txt文件:/www/wd***/php/bin/php artisan r ...

  10. 获取客户机的ip和mac地址

    只获取clientIP package com.ppms.utils; import javax.servlet.http.HttpServletRequest; /** * Created by l ...