Spring-Kafka系列(1)——Kafka集群部署与常用命令

@TOC

一、Kafka集群部署

1.1 部署Zookeeper

Kafka依赖zookeeper对Kafka服务器broker进行监控,所以需要先部署zookeeper,部署可见

https://blog.csdn.net/Numb_ZL/article/details/123168037?spm=1001.2014.3001.5502

1.2 Kafka基本参数介绍

1.2.1 重要参数

参数含义
broker.id=0类似于zookeeper的myid
log.dirs=/home/kafka/logs指定了Broker存储log文件的目录,多个目录逗号隔开
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181指定了zookeeper的连接,,如果部署多套kafka集群则配置为zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2
listeners=PLAINTEXT://localhost:9092外部连接者要通过什么协议访问指定主机名和端口开放的Kafka服务,默认为本机9092端口
advertised.listeners=PLAINTEXT://localhost:9092Broker用于对外发布的监听器,不配置时默认为listeners配置,云主机或docker中用到,需要配置为宿主机ip与port
num.partitions=1默认的分区数,一个topic默认1个分区数
auto.create.topics.enable=false是否允许自动创建Topic,建议置为false,否则可能会有莫名其妙的topic
unclean.leader.election.enable=false是否允许数据落后的副本参与选举,建议置为false,否则可能会引起脏数据
auto.leader.rebalance.enable=false定期切换leader(正常的),但是切换一次代价大,建议置为false
log.retention.{hours|minutes|seconds}=?控制一条消息数据被保存多长时间。从优先级上来说ms设置最高、minutes次之、hours最低
log.retention.bytes=-1指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
message.max.bytes=5242880控制Broker能够接收的最大消息大小,默认是1000012不足1M,应该设置的大一些。
default.replication.factor=3kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
min.insync.replicas=2控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1。default.replication.factor>min.insync.replicas,否则一个副本挂掉后,便无法提交消息。建议default.replication.factor=min.insync.replicas+1
log.cleaner.enable=false是否启用log压缩,一般不用启用,启用的话可以提高性能

1.2.2 其余配置

############################# Server Basics #############################
# 全局唯一id
broker.id = 1
############################# Socket Server Settings #############################
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9092
# 指定对外暴露端口,配置为宿主机ip与port
# advertised.listeners=PLAINTEXT://宿主机ip:9092
# 网络并发线程数
num.network.threads=3
# IO并发线程数
num.io.threads=8
# Socket发送缓冲区
socket.send.buffer.bytes=102400
# Socket接收缓冲区
socket.receive.buffer.bytes=102400
# 服务器能接收的最大字节数,防止OOM
socket.request.max.bytes=104857600
############################# Log Basics #############################
# 日志数据存储路径
log.dirs=/root/kafka/logs-1
# 默认的partitions数目
num.partitions=3
# 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
num.recovery.threads.per.data.dir=1
# 控制Broker能够接收的最大消息大小,应该设置的大一些。
message.max.bytes=5242880
# 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
log.retention.bytes=-1
############################# Log Retention Policy #############################
# 数据留存一周
log.retention.hours=168
# 单个segment的大小 1G
log.segment.bytes=1073741824
# 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
log.retention.check.interval.ms=300000
# kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
default.replication.factor=3
# 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
min.insync.replicas=2
# 是否启用log压缩,一般不用启用,启用的话可以提高性能
log.cleaner.enable=false
############################# Zookeeper #############################
# zk配置
zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
# zk连接超时时间
zookeeper.connection.timeout.ms=6000
#################################### Topic #####################################
# 是否允许自动创建Topic
auto.create.topics.enable=false
# 是否允许Unclean Leader选举
unclean.leader.election.enable=false
# 是否允许定期进行Leader选举
auto.leader.reblance.enable=false

1.3 单机部署Kafka

  1. 根据配置项修改配置文件kafka/config/server.properties

  2. 启动Kafka

    ./kafka-server-start.sh -daemon ../config/server.properties
    
  3. 验证是否启动成功

    [root]# jsp
    12368 Kafka
    [root]# netstat -nap | grep 9092
    tcp6       0      0 :::9092                 :::*                    LISTEN      12368/java
    tcp6       0      0 127.0.0.1:48330         127.0.0.1:9092          ESTABLISHED 12368/java
    tcp6       0      0 127.0.0.1:9092          127.0.0.1:48330         ESTABLISHED 12368/java
    
  4. 创建Topic

    .bin/kafka-topics.sh --create --zookeeper localhost:12181,localhost:12182,localhost:12183 --replication-factor 1 --partitions 1 --topic numb
    
    --replication-factor 1 复制1份
    --partitions 1 创建1个分区
    --topic 创建主题
    

1.4 伪集群部署Kafka

类似于Zookeeper的伪集群部署,可以在一台机器上使用不同的配置文件,启动多个Kafka进程

1.4.1 集群部署的不同配置项

伪集群部署是只需要修改下面配置项

# 指定broker的id,每个id必须唯一
broker.id = 1
# 指定内网访问ip与端口
listeners=PLAINTEXT://localhost:9092
# 指定当前broker的存储路径
log.dirs=/home/kafka/logs-1

1.4.2 伪集群部署配置

启动n个broker需要准备n个配置文件,这里我们配置3个broker

  • server-1.properties

    ############################# Server Basics #############################
    # 全局唯一id
    broker.id = 1
    ############################# Socket Server Settings #############################
    # 指定内网访问ip与端口
    listeners=PLAINTEXT://localhost:9092
    # 网络并发线程数
    num.network.threads=3
    # IO并发线程数
    num.io.threads=8
    # Socket发送缓冲区
    socket.send.buffer.bytes=102400
    # Socket接收缓冲区
    socket.receive.buffer.bytes=102400
    # 服务器能接收的最大字节数,防止OOM
    socket.request.max.bytes=104857600
    ############################# Log Basics #############################
    # 日志数据存储路径
    log.dirs=/root/kafka/logs-1
    # 默认的partitions数目
    num.partitions=3
    # 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
    num.recovery.threads.per.data.dir=1
    # 控制Broker能够接收的最大消息大小,应该设置的大一些。
    message.max.bytes=5242880
    # 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
    log.retention.bytes=-1
    ############################# Log Retention Policy #############################
    # 数据留存一周
    log.retention.hours=168
    # 单个segment的大小 1G
    log.segment.bytes=1073741824
    # 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
    log.retention.check.interval.ms=300000
    # kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
    default.replication.factor=3
    # 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
    min.insync.replicas=2
    # 是否启用log压缩,一般不用启用,启用的话可以提高性能
    log.cleaner.enable=false
    ############################# Zookeeper #############################
    # zk配置
    zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
    # zk连接超时时间
    zookeeper.connection.timeout.ms=6000
    #################################### Topic #####################################
    # 是否允许自动创建Topic
    auto.create.topics.enable=false
    # 是否允许Unclean Leader选举
    unclean.leader.election.enable=false
    # 是否允许定期进行Leader选举
    auto.leader.reblance.enable=false
    
  • server-2.properties

    ############################# Server Basics #############################
    # 全局唯一id
    broker.id = 2
    ############################# Socket Server Settings #############################
    # 指定内网访问ip与端口
    listeners=PLAINTEXT://localhost:9093
    # 网络并发线程数
    num.network.threads=3
    # IO并发线程数
    num.io.threads=8
    # Socket发送缓冲区
    socket.send.buffer.bytes=102400
    # Socket接收缓冲区
    socket.receive.buffer.bytes=102400
    # 服务器能接收的最大字节数,防止OOM
    socket.request.max.bytes=104857600
    ############################# Log Basics #############################
    # 日志数据存储路径
    log.dirs=/root/kafka/logs-2
    # 默认的partitions数目
    num.partitions=3
    # 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
    num.recovery.threads.per.data.dir=1
    # 控制Broker能够接收的最大消息大小,应该设置的大一些。
    message.max.bytes=5242880
    # 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
    log.retention.bytes=-1
    ############################# Log Retention Policy #############################
    # 数据留存一周
    log.retention.hours=168
    # 单个segment的大小 1G
    log.segment.bytes=1073741824
    # 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
    log.retention.check.interval.ms=300000
    # kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
    default.replication.factor=3
    # 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
    min.insync.replicas=2
    # 是否启用log压缩,一般不用启用,启用的话可以提高性能
    log.cleaner.enable=false
    ############################# Zookeeper #############################
    # zk配置
    zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
    # zk连接超时时间
    zookeeper.connection.timeout.ms=6000
    #################################### Topic #####################################
    # 是否允许自动创建Topic
    auto.create.topics.enable=false
    # 是否允许Unclean Leader选举
    unclean.leader.election.enable=false
    # 是否允许定期进行Leader选举
    auto.leader.reblance.enable=false
    
  • server-3.properties

    ############################# Server Basics #############################
    # 全局唯一id
    broker.id = 3
    ############################# Socket Server Settings #############################
    # 指定内网访问ip与端口
    listeners=PLAINTEXT://localhost:9094
    # 网络并发线程数
    num.network.threads=3
    # IO并发线程数
    num.io.threads=8
    # Socket发送缓冲区
    socket.send.buffer.bytes=102400
    # Socket接收缓冲区
    socket.receive.buffer.bytes=102400
    # 服务器能接收的最大字节数,防止OOM
    socket.request.max.bytes=104857600
    ############################# Log Basics #############################
    # 日志数据存储路径
    log.dirs=/root/kafka/logs-3
    # 默认的partitions数目
    num.partitions=3
    # 单个日志目录重新加载时线程数,将此值提高有利于提升重启或恢复效率
    num.recovery.threads.per.data.dir=1
    # 控制Broker能够接收的最大消息大小,应该设置的大一些。
    message.max.bytes=5242880
    # 指定Broker为消息保存的总磁盘容量大小,默认是-1表示不限制
    log.retention.bytes=-1
    ############################# Log Retention Policy #############################
    # 数据留存一周
    log.retention.hours=168
    # 单个segment的大小 1G
    log.segment.bytes=1073741824
    # 日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.hours)
    log.retention.check.interval.ms=300000
    # kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
    default.replication.factor=3
    # 控制消息写入多少个副本后算已提交,默认为1,实际环境建议大于1
    min.insync.replicas=2
    # 是否启用log压缩,一般不用启用,启用的话可以提高性能
    log.cleaner.enable=false
    ############################# Zookeeper #############################
    # zk配置
    zookeeper.connect=localhost:12181,localhost:12182,localhost:12183
    # zk连接超时时间
    zookeeper.connection.timeout.ms=6000
    #################################### Topic #####################################
    # 是否允许自动创建Topic
    auto.create.topics.enable=false
    # 是否允许Unclean Leader选举
    unclean.leader.election.enable=false
    # 是否允许定期进行Leader选举
    auto.leader.reblance.enable=false
    

1.4.3 伪集群启动

集群启动前要先启动zookeeper

./bin/kafka-server-start.sh -daemon ../config/server-1.properties
./bin/kafka-server-start.sh -daemon ../config/server-2.properties
./bin/kafka-server-start.sh -daemon ../config/server-3.properties
1.4.4 查看集群状态
  • jps查看是否有zk与kafka进程信息

    [root@local kafka]# jps
    3889 QuorumPeerMain
    6049 Kafka
    4246 Kafka
    3819 QuorumPeerMain
    3854 QuorumPeerMain
    5674 Kafka
    
  • zookeeper节点查看broker配置信息

    [zk: localhost:2181(CONNECTED) 8] ls /
    [admin, brokers, cluster, config, consumers, controller....]
    [zk: localhost:2181(CONNECTED) 8] ls /brokers/ids
    [1, 2, 3]
    

1.5 Kafka常用命令

1.5.1 broker启动

./bin/kafka-server-start.sh [-daemon] ../config/server.properties [--override property=value]*

1.5.2 broker停止

./bin/kafka-server-stop.sh

1.5.3 topic管理

创建topic
./bin/kafka-topics.sh --zookeeper localhost:2181  --create --partitions [分区数] --replication-factor [副本数] --tpoic tpoic名称 --config [key=value]
  • 创建一个名字为numb3分区,每个分区3副本,提交2个以上副本算成功提交的topic
./bin/kafka-topics.sh --zookeeper localhost:2181  --create --partitions 3 --replication-factor 3 --tpoic tpoic名称 --config min.insync.replicas=2
查看所有topic
./bin/kafka-topics.sh --zookeeper localhost:2181 --list
查看指定topic信息
/bin/kafka-topics.sh --zookeeper localhost:2181 --topic [topic名称] --describe

返回

Topic:numb      PartitionCount:3        ReplicationFactor:3     Configs:min.insync.replicas=2
        Topic: numb     Partition: 0    Leader: none    Replicas: 1,2,3 Isr:
        Topic: numb     Partition: 1    Leader: none    Replicas: 2,3,1 Isr:
        Topic: numb     Partition: 2    Leader: none    Replicas: 3,1,2 Isr:
  • Topic:topic的名称
  • PartitionCount:Partition的个数
  • ReplicationFactor:topic的副本数
  • Configs:topic级的配置项

Topic: numb Partition: 1 Leader: 2 Replicas: 2 Isr: 2

  • Leader:代表的是Partition为1的Leader在id=2的Broker上
  • Replicas:显示给定partiton所有副本所存储节点的节点列表,不管该节点是否是leader或者是否存活
  • Isr:副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步 Isr是Replicas的子集。
修改topic的配置
  • 修改topic的partitions数目
/bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic [topic名称] --partitions [新分区数]
删除topic
/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic [topic名称] 

1.5.4 producer生产数据

使用生产者脚本kafka-console-producer.sh生产数据

./bin/kafka-console-producer.sh --broker-list loalhost:9092,localhost:9093,localhost:9094 --topic [topic名称] 

之后console进入kafka生产者模式,每次回车发送一次数据

>>123
>>456
>>789
>>发送完成

1.5.5 consumer消费数据

使用消费者脚本kafka-console-consume.sh消费/查看数据

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic [topic名称] --partition [分区id] --from-beginning

1.5.6 使用Kafka-Tool观察数据

[Kafka-Tool官网]:https://www.kafkatool.com/

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring-Kafka整合是将Spring框架与Kafka消息系统进行整合,使得开发者能够方便地使用Spring框架进行Kafka消息的生产和消费。 Spring-Kafka整合提供了以下功能: 1. 自动配置Kafka生产者和消费者。 2. 提供KafkaTemplate用于发送消息。 3. 提供@KafkaListener注解用于监听Kafka主题。 4. 提供KafkaListenerContainerFactory用于创建Kafka监听器容器。 5. 提供KafkaAdmin用于管理Kafka集群Spring-Kafka整合的使用步骤如下: 1. 添加Spring-Kafka依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>${spring-kafka.version}</version> </dependency> ``` 2. 配置Kafka连接 在application.properties文件中添加Kafka连接相关配置: ``` spring.kafka.bootstrap-servers=localhost:9092 ``` 3. 编写Kafka生产者 使用KafkaTemplate发送消息: ``` @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } ``` 4. 编写Kafka消费者 使用@KafkaListener注解监听Kafka主题: ``` @KafkaListener(topics = "test-topic") public void receiveMessage(String message) { //消费消息 } ``` 5. 配置Kafka监听器容器 使用KafkaListenerContainerFactory创建Kafka监听器容器: ``` @Bean public KafkaListenerContainerFactory<?> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerFactory()); factory.setConcurrency(1); factory.getContainerProperties().setPollTimeout(3000); return factory; } ``` 6. 配置Kafka管理器 使用KafkaAdmin创建Kafka管理器: ``` @Bean public KafkaAdmin kafkaAdmin() { Map<String, Object> configs = new HashMap<>(); configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); return new KafkaAdmin(configs); } ``` Spring-Kafka整合的使用可以使得开发者更加方便地使用Kafka消息系统,提高消息的生产和消费效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值