kafka 3.5 如何选择启用kraft还是ZooKeeper(选择哪个server实现,不涉及到server具体的初始化)

这里用kakfa 3.5版本做源码演示

1、启动命令

首先看一下kafka-server-start.sh 中的最后一行

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"

我们知道了执行的是core/src/main/scala/kafka/Kafka.scala下的main方法

def main(args: Array[String]): Unit = {
    try {
      //获得配置文件中的参数
      val serverProps = getPropsFromArgs(args)
      //build server,非常重要,因为你要确定到底执行的是哪种server
      val server = buildServer(serverProps)
	  //省略干扰代码。。。。
      //执行server的 startup
      try server.startup()
      //省略干扰代码。。。。
  }
  //生成server
  private def buildServer(props: Properties): Server = {
    val config = KafkaConfig.fromProps(props, false)
    if (config.requiresZookeeper) { //是否在properties中有process.roles=broker,controller配置
    //没有则构造KafkaServer
      new KafkaServer( 
        config,
        Time.SYSTEM,
        threadNamePrefix = None,
        enableForwarding = false
      )
    } else {
    //存在则构造KafkaRaftServer
      new KafkaRaftServer(
        config,
        Time.SYSTEM,
        threadNamePrefix = None
      )
    }
  }

其中config.requiresZookeeper 就是判断/config/kraft/server.properties 中是否有下面的配置
参考Kafka2.8无Zookeeper模式下集群部署


# The role of this server. Setting this puts us in KRaft mode
process.roles=broker,controller
 
# The node id associated with this instance's roles
node.id=1
 
# The connect string for the controller quorum
controller.quorum.voters=1@master:9093,2@slave1:9093,3@slave2:9093

2、服务端选择一种server初始化

每一种server都要实现下面这三个接口

trait Server {
  def startup(): Unit
  def shutdown(): Unit
  def awaitShutdown(): Unit
}

(1) zk初始化

初始化调用的是kafkaServer.scala 这个类中的startup方法

  /**
   * Start up API for bringing up a single instance of the Kafka server.
   * Instantiates the LogManager, the SocketServer and the request handlers - KafkaRequestHandlers
   * 启动用于启动 Kafka 服务器的单个实例的 API。实例化 LogManager、SocketServer 和请求处理程序 - KafkaRequestHandlers
   */
  override def startup(): Unit = {
  	  //省略代码。。。。。
  	  //初始化逻辑
		
  }

(2) raft初始化

初始化调用的是KafkaRaftServer.scala

  //raft启动函数
  override def startup(): Unit = {
    Mx4jLoader.maybeLoad()
    //这行代码使用foreach方法对controller进行迭代,如果controller不为None,则调用其startup方法。这里使用了占位符语法_.startup(),表示对每个元素执行startup方法。
    //ControllerServer 对象,当节点的配置 process.roles 中指定了 controller 角色时才会创建,处理元数据类请求,包括 topic 创建删除等
    controller.foreach(_.startup())
    //broker.foreach(_.startup()):与前一行代码类似,这行代码对broker进行迭代,并调用其startup方法。
    //BrokerServer 对象,当节点的配置 process.roles 中指定了 broker 角色时才会创建,处理消息数据类请求,例如消息的生产消费等
    broker.foreach(_.startup())
    AppInfoParser.registerAppInfo(Server.MetricsPrefix, config.brokerId.toString, metrics, time.milliseconds())
    info(KafkaBroker.STARTED_MESSAGE)
  }

controller.foreach(_.startup())遍历调用的是ControllerServer.scala类中的startup方法,主要是初始化控制器

broker.foreach(_.startup()) 遍历调用的是BrokerServer.scala类中的startup方法,主要是初始化每一个broker

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Kafka 3.5的部署,你可以按照以下步骤进行操作: 1. 安装Java:首先,确保在部署Kafka之前已经安装了Java。Kafka需要Java环境来运行。你可以从Oracle官方网站上下载并安装适合你系统的Java版本。 2. 下载Kafka:从Apache Kafka的官方网站(http://kafka.apache.org/downloads)上下载适合你系统的Kafka版本。选择一个稳定版本并下载压缩包。 3. 解压缩Kafka:将下载的Kafka压缩包解压到你想要安装的目录下。 4. 配置Kafka:进入解压后的Kafka目录,在config文件夹中找到server.properties文件,打开并根据自己的需求进行配置。你可以修改Zookeeper连接信息、Kafka监听端口等参数。 5. 启动Zookeeper:在Kafka的解压目录中找到bin文件夹,启动一个Zookeeper实例。运行以下命令: ``` ./zookeeper-server-start.sh ../config/zookeeper.properties ``` 6. 启动Kafka Broker:在同样的bin文件夹下启动Kafka Broker实例。运行以下命令: ``` ./kafka-server-start.sh ../config/server.properties ``` 7. 创建Topic:使用Kafka提供的命令行工具创建一个Topic。运行以下命令: ``` ./kafka-topics.sh --create --topic YOUR_TOPIC_NAME --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 ``` 将YOUR_TOPIC_NAME替换为你想要创建的Topic名称。 8. 发布和消费消息:使用Kafka提供的命令行工具来发布和消费消息。可以使用以下命令分别启动一个生产者和一个消费者: ``` ./kafka-console-producer.sh --topic YOUR_TOPIC_NAME --bootstrap-server localhost:9092 ``` ``` ./kafka-console-consumer.sh --topic YOUR_TOPIC_NAME --bootstrap-server localhost:9092 ``` 将YOUR_TOPIC_NAME替换为你创建的Topic名称。 这样,你就完成了Kafka 3.5的部署。你可以根据自己的需求进一步配置和使用Kafka
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值