kafka服务端

kafka集群中会有一个或者多个broker,其中只有一个broker会被选为控制器(kafka controller),其负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化,控制器将通知所有的broker更新其元数据信息。

​ 控制器的选择时通过向zookeeper中写入临时节点/controller进行实现的,创建成功的broker将会成为控制器。zookeeper另一个与控制器有关的节点是:/controller_epoch节点,用来记录控制发生变更的次数,每产生一个新的控制器这个值就i会增加一。kafka也是通过controller_epoch来保证控制器的唯一性。

leader副本选举

分区副本的选举是由控制器负责具体实施,基本的思路是:按照AR集合所有副本的顺序进行查找第一个存活的副本,并且这个副本在ISR集合中。一个分区中的AR集合在分配的时候就被指定了,只要不发生重分配,那么集合内部的副本的顺序是保持不变的,而分区中ISR集合中副本的顺序是有可能发生改变的。

服务端参数

  • broker.id是broker启动前必须设定的参数,kafka集群就是使用它进行唯一标识的。如果meta.properties文件中broker.id与server.properties中broker.id不一致时候,将会抛InconsistentBrokerIdException

    ​ kafka服务端重要参数

    参数名称默认值参数释义
    zookeeper.connectlocalhost:2181kafka使用的zookeeper集群地址,多个采用","分隔
    auto.create.topics.enabletrue是否开启自动创建主题的功能
    auto.leader.rebalance.enabletrue是否自动leader再均衡功能
    compression.typeproducer消息压缩类型。默认值标识跟生产者使用相同的类型
    log.retention.hours168(7天)日志文件的留存时间,单位为小时
    log.roll.hours168(7天)经过多长时间后会强制新建一个日志分段
    log.roll.msnull同上,单位为ms,但是优先级比上面的要高
    log.segment.bytes1G日志分段文件的最大值,超过这个值后会强制创建一个新的日志分段。
    num.partitions1主题中默认的分区数
要配置Apache Kafka 服务器以在ARM架构上运行,特别是在使用Docker时,你可以按照以下步骤操作: 1. **设置基础配置**[^1]: - 配置`broker.id`为服务器的唯一标识(如 `broker.id=3`)。 - 设置`zookeeper.connect`,连接到ZooKeeper集群,这里使用的是IP地址和端口(如`zookeeper.connect=192.168.44.128:2181,192.168.44.129:2181,192.168.44.130:2181`)。 - 定义`advertised.listeners`,指定对外公开的监听端口(如`advertised.listeners=PLAINTEXT://192.168.44.130:9092`)。 - 指定日志目录(如`log.dirs=/data/kafka/kafka-logs`)。 2. **启动Kafka容器**[^2],如果使用Docker-Compose,可以创建一个新的`docker-compose.yml`文件,定义Kafka服务和依赖项,可能类似于这样: ```yaml version: '3' services: kafka: image: confluentinc/cp-kafka:latest environment: KAFKA_BROKER_ID: 3 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 volumes: - ./kafka-data:/var/lib/kafka/data ``` 确保替换`image`为所需的Kafka版本(如`confluentinc/cp-kafka:latest`),并使用本地主机名或实际IP替换`localhost`。 3. **启动服务**: - 使用`docker-compose up -d`命令启动Kafka服务(`-d`表示后台运行)。 4. **验证服务状态**: - 可以通过`netstat -tna | grep -e 9092 -e 2181`来检查KafkaZooKeeper的端口是否正在监听。 请注意,如果你使用的是新版本的Kafka(3.3及以上),可能会跳过ZooKeeper的部署,因为KRaft取代了部分功能。然而,在生产环境中,通常还是推荐保留ZooKeeper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值