热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跟我学Kafka:如何高效运维之主题篇

摘要:对Kafka-topics命令详解,并从运维角度窥探Kafka关于topic的运作机制。作为一个Kafka初学者,需要快速成长&#

摘要:对Kafka-topics命令详解,并从运维角度窥探Kafka关于topic的运作机制。

作为一个Kafka初学者,需要快速成长,承担维护公司Kafka的重任,对Kafka的学习,我按照三步走策略:


  • 阅读Kafka相关书籍
  • 从运维实战的角度学习Kafka
  • 阅读源码,体系化,精细化掌握其实现原理

本文属于学习的第二阶段:[从运维实战的角度学习Kafka],本文重点学习Kafka的主题,如何通过运维命令创建、更新主题,从Topic的可运维属性,了解Topic在Kafka内部的运作机制


1、Kafka topic运维命令的基本使用

Kafka提供了kafka-topics脚步用来创建、修改、删除、查询topic,位于${kafka_home}/bin/kafka-topics.sh,其中kafka_home表示Kafka的安装目录。


选项类型详细说明
–create命令创建Topic
–delete命令删除Topic
–alter命令修改Topic
–describe命令查看Topic
–delete-config命令删除topic配置的属性
–list命令查询topic列表
–bootstrap-server选项指定kafka集群的地址
–zookeeper选项zk集群的地址,与–bootstrap-server选项必须有一个不能为空
–partitions选项Topic的分区数量,可以认为是数据分片的份额,每一个分区还可以有多个副本。
–replication-factor选项分区的副本因子(包含Leader个数)
–topic选项主题的名称
–if-exists选项在修改或删除topic时,如果指定该选项,只有在存在时才执行
–if-not-exists选项在创建topic时,如果指定该选项,只有在topic不存在时才执行
–replica-assignment选项收到指定分区与副本,官方文档看起来比较负责,下文详细介绍。
–disable-rack-aware选项禁止机架感知副本分配
–exclude-internal选项在使用–list命令查询主题时过滤内部权限
–topics-with-overrides选项使用–describe只显示topic相关的属性,分区信息不显示。
–unavailable-partitions选项使用–describe只显示Leader不可用的分区,如有输出信息,需要关注
–under-replicated-partitions选项使用–describe只显示有副本不在ISR的分区信息,如有输出信息,需要关注
–config选项设置topic的属性

接下来对一些上述一些不那么直观的选项进行单独介绍。


1.1 --replica-assignment

收到指定副本数量和分区信息,该参数不能和–partitions、–replication-factor同时使用。
在这里插入图片描述
其格式为:每一个逗号表示一个分区的配置,每一个分区分布的broker用冒号隔开。

–replication-factor 0:1,1:2,0:2 表示的含义是什么呢?

分区数量为3个,其中分区0(p0)分布在broker 0和1上,分区1(p1)分布在broker 1,2上,分区2(p2)分布在broker 0与1上。从而推出分区数量为3,副本因子为2,每一个分区的第一个broker为Leader,其演示效果如下:

在这里插入图片描述


2、Kafka Topic配置项详解

通过kafka-topics脚本在创建topic时可通过–config选项来定制化topic的属性,接下来试图从这些属性来探究Kafka背后的运作机制。


  • cleanup.policy
    数据文件清除机制,支持Broker全局配置,Topic定制化制定,可选策略:delete、compact,默认值为delete。Kafka提供了数据段压缩的功能,按照相同Key只保留最新Key的策略,减少数据段大小,系统主题__consumer_offsets(用于存储消息进度的主题)其清除策略就是compact。

  • compression.type
    压缩类型,Kafka目前支持的压缩算法:gzip,snappy,lz4,zstd,还支持如下两个配置:

    • uncompressed
      不开启压缩
    • producer
      由发送方指定压缩算法,客户端的可选值为gzip,snappy,lz4,zstd。

    数据进行压缩,能节省网络带宽与存储空间,但会增加CPU的性能,故最佳实践:Broker服务端不配置压缩算法,由发送方指定,在发送方进行压缩,服务端原封不动进行存储,并且在消费端解压缩

  • delete.retention.ms
    如果cleanup.policy策略为compact时,针对消息体为null的消息,Kafka会认为对其进行压缩没有意义,立马删除也太草率,故Kafka引入了该参数,用来设置这些body为null的消息,在一次压缩执行后,多久后可被删除,默认值为24h。

  • file.delete.delay.ms

    文件在删除时延迟时间,默认为60s,Kafka中可以支持按topic删除日志文件(数据文件),执行删除之前,首先会将该topic下的分区文件重名为*.deleted,等待file.delete.delay.ms才从文件系统中删除。

  • flush.messages
    按消息条数设置刷盘频率,如果设置为1表示每写一条消息就触发一次刷盘,默认值为Long.MaxValue,在大部分场景官方不建议设置该值,直接利用操作系统的刷盘机制即可,Kafka希望通过副本机制能保证数据的持久可靠存储

  • flush.ms
    按时间间隔设置刷盘频率,默认为Long.MaxValue,Kafka希望借助操作系统的刷盘机制,数据可靠性通过副本机制来保证。(副本机制其实无法保证同机房断电带来的数据丢失)

  • index.interval.bytes
    索引文件的密度,Kafka并不会为每一条消息(消息偏移量)建立索引,而是每隔一定间隔,建立一条索引。该参数就是设置其间隔,默认为4096个字节。

  • max.message.bytes
    一次消息发送(Batch)允许的最大字节数量,默认为1000000,约等于1M。

  • message.downconversion.enable
    是否开启消息格式的自动转化,如果设置为false,Broker不会执行消息格式转化,将不兼容老的客户端消费消息。

  • message.format.version
    可以指定该主题按特定版本的API版本所对应的存储格式进行存储。

  • message.timestamp.type
    设置消息中存储的时间戳的获取方式,可选值:

    • CreateTime
      消息在客户端的创建时间
    • LogAppendTime
      Broker服务端接收到的时间

    默认为CreateTime。

  • message.timestamp.difference.max.ms
    当message.timestamp.type设置为CreateTime时,允许Broker端时间与消息创建时间戳最大的差值,如果超过该参数设置的阔值,Broker会拒绝存储该消息,默认为:Long.MaxValue,表示不开启开机制

  • min.cleanable.dirty.ratio
    控制可压缩的脏数据比例,默认为0.5d,如果一个文件中"脏数据"(未被压缩的数据)低于该阔值,将不继续对该文件进行压缩,该方法生效的条件为cleanup.policy设置为compact

  • min.compaction.lag.ms
    设置一条消息进入到Broker后多久之内不能被compact,默认为0,表示不启用该特性,该方法生效的条件为cleanup.policy设置为compact

  • min.insync.replicas
    如果客户端在消息发送时将ack设置为all,该参数指定必须至少多少个副本写入成功,才能向客户端返回成功,默认为1,这个是一个兜底配置,all的含义表示在ISR中的副本必须全部写入成功。

  • preallocate
    是否开启预热文件(提前创建文件),默认为false。

  • retention.bytes
    一个日志分区保留的最大字节数,默认为-1,表示不限制。

  • retention.ms
    一个日志分区允许保留的最大时长,默认保留7d。

  • segment.bytes
    一个日志段的大小,默认为1G。

  • segment.index.bytes
    一个日志段索引文件的大小,默认为10M。

  • segment.jitter.ms
    段滚动的最大随机差。

  • segment.ms
    Kafka强制滚动一个段的间隔时间,及时该段并未全部填满消息,默认值为7d

  • unclean.leader.election.enable
    是否允许不在ISR中副本在没有ISR副本选择之后竞争成为Leader,这样做有可能丢数据,默认为false。


3、总结

本文从运维命令开始学习,从使用运维层面全面了解Topic,从而窥探其Kafka内部一些重要特性,为后续从源码角度研究其实现打下坚实基础,本文的最后给出一个分区数量为3,副本因子为3的topic分区图来结束本文的讲解。


在这里插入图片描述

好了,本文就介绍到这里了,一键三连(关注、点赞、留言)是对我最大的鼓励

掌握一到两门java主流中间件,是敲开BAT等大厂必备的技能,送给大家一个Java中间件学习路线,助力大家实现职场的蜕变。

Java进阶之梯,成长路线与学习资料,助力突破中间件领域

最后分享笔者一个硬核的RocketMQ电子书,您将获得千亿级消息流转的运维经验。
在这里插入图片描述
获取方式:私信回复 RMQPDF 即可获得。

个人网站:https://www.codingw.net


推荐阅读
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • Java中不同类型的常量池(字符串常量池、Class常量池和运行时常量池)的对比与关联分析
    在研究Java虚拟机的过程中,笔者发现存在多种类型的常量池,包括字符串常量池、Class常量池和运行时常量池。通过查阅CSDN、博客园等相关资料,对这些常量池的特性、用途及其相互关系进行了详细探讨。本文将深入分析这三种常量池的差异与联系,帮助读者更好地理解Java虚拟机的内部机制。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 寻求推荐:高效生成二进制协议格式说明注释的专业工具 ... [详细]
author-avatar
hang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有