Kafka源码分析-配置文件

  • 几乎没有服务不需要配置:命令行参数 or 配置文件;
  • 配置项多了, 设置起来太麻烦;配置项少, 不够灵活;

Kafka的配置

  • Kafka的配置相当丰富,写成本手册一点问题都没有, 官网配置说明;
  • 与Kafka Server相关的配置分类: Zookeeper General Authorizer Socket Server Log Replication Controlled shutdown Offset management Quota Kafka Metrics SSL Sasl

Kafka配置设置实现

  • 所在文件: core/src/main/scala/kafka/server/KafkaConfig.scala;
  • object Defaults: 定义了所有的配置项默认值;
  • object KafkaConfig: 定义了所有的配置项名称:
PrincipalBuilderClassProp = SslConfigs.PRINCIPAL_BUILDER_CLASS_CONFIG
...

说明文档:

/* Documentation */
  /** ********* Zookeeper Configuration ***********/
  val ZkConnectDoc = "Zookeeper host string"
...

创建了configDef, 是一个ConfigDef类对象:

private val configDef = {
    import ConfigDef.Importance._
    import ConfigDef.Range._
    import ConfigDef.Type._
    import ConfigDef.ValidString._

    new ConfigDef().define(...).define(...)...

作为Class KafkaConfig的伴生类,定义了创建KafkaConfig对象的工厂方法:

def apply(props: java.util.Map[_, _]): KafkaConfig = new KafkaConfig(props, true)

通用Config类:AbstractConfig

  • 所在文件: clients/src/main/java/org/apache/kafka/common/config/AbstractConfig.java
  • 源码中注释:

A convenient base class for configurations to extend. This class holds both the original configuration that was provided as well as the parsed

  • 构造函数:
public AbstractConfig(ConfigDef definition, Map<?, ?> originals, Boolean doLog)

originals表示所有被用户设置了的参数; definition表示所有的配置项,包默认值; 通过调用definition.parse(this.originals)得到使用用户设置参数更新后的所有配置项和值;

  • 提供一系列的get方法,返回相应配置的值: getInt getShort getLong getDouble getList getBoolean getString getPassword getClass

通用config构建类:ConfigDef

  • 所在文件: clients/src/main/java/org/apache/kafka/common/config/ConfigDef.java
  • define: 加入某一配置项,包括其name, type, defaultValue, importance, documentation等;
  • parse(Map<?, ?> props): 使用props来更新一组配置项;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏熊训德的专栏

Hbase compaction 源码分析一:compaction 概况分析

本文档从框架的源码角度梳理了,hbase 在什么情况下会触发compaction,并通过官方文档说明出发minor 和major compaction的时间点。

4981
来自专栏CDA数据分析师

学会这几招,轻松掌握Python文件管理

一、Python中的文件管理 文件管理是很多应用程序的基本功能和重要组成部分。Python可以使文件管理极其简单,特别是和其它语言相对比。 以下,Peyton ...

3056
来自专栏码农阿宇

asp.net core轻松入门之MVC中Options读取配置文件

接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利...

2564
来自专栏xingoo, 一个梦想做发明家的程序员

Java程序员的日常——经验贴(纯干货)

工作当中遇到的事情比较杂,因此涉及的知识点也很多。这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 ...

21710
来自专栏Java与Android技术栈

Scala学习笔记(一)mac下安装ScalaIDE选择总结

过年前就定(chui)下了目(niu)标(bi),今年要学习一下Scala和Spark赶一下潮流。谁叫落后就要挨打呢,程序员只能不停的学习。一个语言,学习的第一...

1392
来自专栏.NET后端开发

如何通过经纬度获取地址信息?

摘要 Google Maps API Web Services,是一个为您的地图应用程序提供地理数据的 Google 服务的 HTTP 接口集合。具体包括:Go...

62711
来自专栏非著名程序员

Android 混淆从入门到精通

? 简介 作为Android开发者,如果你不想开源你的应用,那么在应用发布前,就需要对代码进行混淆处理,从而让我们代码即使被反编译,也难以阅读。混淆概念虽然容...

3509
来自专栏炸天帮5

win32进程概念之句柄表,以及内核对象.

我们知道.我们使用CreateProcess 的时候会返回一个进程句柄.以及线程句柄. 其实在调用CreateProcess的时候.内核中会新建一个EPROCE...

911
来自专栏Danny的专栏

ASP.NET中利用Application和Session统计在线人数、历史访问量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

2773
来自专栏大内老A

我的WCF之旅(1):创建一个简单的WCF程序

为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。对...

2168

扫码关注云+社区

领取腾讯云代金券