【Kafka从入门到放弃系列 二】Kafka集群搭建及基本命令

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 【Kafka从入门到放弃系列 二】Kafka集群搭建及基本命令

上一篇blog详细了解了kafka基本概念、生产消费者模型、基本架构,我对kafka有了一个整体的认知,其整体框架其实可以理解为如下架构【一个Partion分区的leader和foller不会存储到一个broker上】:

消息生产出来后依据topic发送到Kafka集群中去,由集群来管理消息,消费集群主动拉取到消息后消费【消费者的消费速度可以由自己来决定,可能会存在长连接轮询的浪费问题】,整体的消息和集群管理由Zookeeper来进行。了解了这些后我们来搭建一个kafka集群。由于我只有一台电脑,所以准备使用虚拟机搭建的方式来进行环境搭建,那么我先部署一个单节点虚拟机并在上面运行kafka,然后再克隆出两台虚拟机来,这样就组成了一个分布式虚拟机集群

单节点虚拟机安装

虚拟机搭建我使用如下的组合进行:环境准备的时候我决定使用VMware+Centos7+SecureCRT+AppNode的方式来搭建和管理虚拟机,详细的搭建过程不在这里讨论,可以参照我另一篇文章【分布式集群搭建 一】虚拟机配置(VMware+Centos7+SecureCRT+AppNode),按照这篇文章搭建好单节点虚拟机后,我们可以在上边安装Kafka:

下载安装Kafka

在官方网站找一个镜像站点kafka官方站点下载Kafka,我们这里选择清华的镜像站点下载一个Kafka:

注意这里有个坑,直接用wget的方式拉取到centos再解压会报错,所以我们先下载到windows,然后上传到centos上,通过我们的AppNode:

直接解压或者使用命令:tar -xvf kafka_2.13-2.6.0.tgz,解压完成后可以看到如上目录

修改Zookeeper配置文件

进入如下路径/kafka/kafka_2.13-2.6.0/config/修改zookeeper.properties配置文件

dataDir=/tmp/zookeeper
dataLogDir=/tmp/zookeeper/log
clientPort=2181
maxClientCnxns=0
admin.enableServer=false
tickTime=2000
initLimit=10
syncLimit=5
#设置broker Id的服务地址,这里的0、1、2和brokerid保持一致
server.0=192.168.5.101:2888:3888
server.1=192.168.5.102:2888:3888
server.2=192.168.5.103:2888:3888

其中,2888端口为zookeeper的通讯端口,3888端口为选举端口。然后进入dataDir的目录/tmp/zookeeper下创建文件myid,并写入server.id具体值(建议和kafka的broker.id保持一致)

并在myid中填写和brokerid以及本机ip对应server一致的序号:

修改Kafka配置文件

进入如下路径/kafka/kafka_2.13-2.6.0/config/,修改 server.properties的配置:

broker.id=0
zookeeper.connect=192.168.5.101:2181,192.168.5.102:2181,192.168.5.103:2181
log.dirs=/kafka/kafka_2.13-2.6.0/data

克隆虚拟机集群

克隆集群并管理可以参照我的另一篇blog-【分布式集群搭建 二】克隆虚拟机并配置集群,使用了三台机器来进行分布式集群配置,配置完成后可以看到集群运转正常:

当然克隆完成后我们需要分别修改配置zookeeper的配置文件

创建每台机器的myid文件

进入dataDir的目录/tmp/zookeeper下创建文件myid,并写入server.id具体值,分别在102和103的myid文件中写入1和2,保持和每台机器的server.id以及brokerid一致。

修改每台机器的Kafka配置

分别进入每台机器的如下路径/kafka/kafka_2.13-2.6.0/config/,修改 server.properties的配置

broker.id=0
zookeeper.connect=192.168.5.101:2181,192.168.5.102:2181,192.168.5.103:2181
log.dirs=/kafka/kafka_2.13-2.6.0/data
broker.id=1
zookeeper.connect=192.168.5.101:2181,192.168.5.102:2181,192.168.5.103:2181
log.dirs=/kafka/kafka_2.13-2.6.0/data
broker.id=2
zookeeper.connect=192.168.5.101:2181,192.168.5.102:2181,192.168.5.103:2181
log.dirs=/kafka/kafka_2.13-2.6.0/data

运行kafka命令

修改完成后我们来操作一下Kafka来实现一下,这个时候用SecureCRT来同时开启三个会话:分别在三台机器上以守护进程的方式分别操作:

启动zookeeper和Kafka

启动zookeeper     bin/zookeeper-server-start.sh  -daemon  config/zookeeper.properties   
启动kafka集群     bin/kafka-server-start.sh      -daemon  config/server.properties

创建topic、查看已创建topic、查看topic的详情

创建topic       bin/kafka-topics.sh  --zookeeper 192.168.5.101:2181 --create --replication-factor 3 --partitions 1 --topic tml-second
查看topic列表   bin/kafka-topics.sh  --zookeeper 192.168.5.101:2181 --list
查看topic详情   bin/kafka-topics.sh  --zookeeper 192.168.5.101:2181 --describe --topic tml-second

需要注意副本数不能超过集群机器数,同一个机器上出现两个同一分区的副本,分区的效果就没有了,如下:

查看详情时第一个行显示所有partitions的一个总结,以下每一行给出一个partition中的信息,如果我们只有一个partition,则只显示一行。

  • leader 是在给出的所有partitons中负责读写的节点,每个节点都有可能成为leader,这里leader为2,也就是102机器
  • replicas 显示给定partiton所有副本所存储节点的节点列表,不管该节点是否是leader或者是否存活,这里就是我们的三台机器、0、1、2。分别对应101、102、103.
  • isr 副本都已同步的的节点集合,这个集合中的所有节点都是存活状态,并且跟leader同步,这里也是我们的三台机器、0、1、2。分别对应101、102、103.说明我们三台机器都在集群里没有脱机

我们来通过一个复杂案例来确定其分布机制:

发送消息、消费消息

发送消息:bin/kafka-console-producer.sh --broker-list  192.168.5.101:9092 --topic tml-second
消费消息:bin/kafka-console-consumer.sh  --bootstrap-server 192.168.5.102:9092 --from-beginning --topic tml-second
消费同一个组的消息:bin/kafka-console-consumer.sh  --bootstrap-server 192.168.5.102:9092  --topic tml-second --consumer.config config/consumer.properties

删除topic

bin/kafka-topics.sh  --zookeeper 192.168.5.101:2181 --delete --topic tml-kafka

关闭kafka服务

bin/kafka-server-stop.sh stop

这篇blog历程比较艰难,由于linux不是很数量,所以一开始集群配置好后老是启动不了,折腾了两天才发现zookeeper和kafka没有以守护进程的方式开启,CTRL+C杀了进程,导致后续kafka老是连接不上zookeeper,不过终于搭建好一个分布式集群了,柳暗花明又一村!

相关文章
|
28天前
|
消息中间件 Kafka 测试技术
【Kafka揭秘】Leader选举大揭秘!如何打造一个不丢失消息的强大Kafka集群?
【8月更文挑战第24天】Apache Kafka是一款高性能分布式消息系统,利用分区机制支持数据并行处理。每个分区含一个Leader处理所有读写请求,并可有多个副本确保数据安全与容错。关键的Leader选举机制保障了系统的高可用性和数据一致性。选举发生于分区创建、Leader故障或被手动移除时。Kafka提供多种选举策略:内嵌机制自动选择最新数据副本为新Leader;Unclean选举快速恢复服务但可能丢失数据;Delayed Unclean选举则避免短暂故障下的Unclean选举;Preferred选举允许基于性能或地理位置偏好指定特定副本为首选Leader。
38 5
|
26天前
|
消息中间件 监控 Java
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
联通实时计算平台问题之监控Kafka集群的断传和积压情况要如何操作
|
28天前
|
消息中间件 监控 Java
【Kafka节点存活大揭秘】如何让Kafka集群时刻保持“心跳”?探索Broker、Producer和Consumer的生死关头!
【8月更文挑战第24天】在分布式系统如Apache Kafka中,确保节点的健康运行至关重要。Kafka通过Broker、Producer及Consumer间的交互实现这一目标。文章介绍Kafka如何监测节点活性,包括心跳机制、会话超时与故障转移策略。示例Java代码展示了Producer如何通过定期发送心跳维持与Broker的连接。合理配置这些机制能有效保障Kafka集群的稳定与高效运行。
27 2
|
2月前
|
消息中间件 Kafka
kafka 集群环境搭建
kafka 集群环境搭建
58 8
|
2月前
|
消息中间件 Java Kafka
kafka Linux环境搭建安装及命令创建队列生产消费消息
kafka Linux环境搭建安装及命令创建队列生产消费消息
46 4
|
1月前
|
消息中间件 Java Kafka
Linux——Kafka集群搭建
Linux——Kafka集群搭建
34 0
|
1月前
|
消息中间件 Kafka Apache
部署安装kafka集群
部署安装kafka集群
|
2月前
|
消息中间件 监控 Java
使用 JMX 监控 Kafka 集群性能指标
使用 JMX 监控 Kafka 集群性能指标
258 1
|
3月前
|
消息中间件 运维 数据管理
Kafka 如何基于 KRaft 实现集群最终一致性协调
Kafka 3.3.1 引入了 KRaft 元数据管理组件,替代 Zookeeper,以简化集群一致性维护,支持更大规模集群并减轻运维复杂性。在 Zookeeper 模式下,需同时运维 ZK 和 Broker,而 KRaft 模式仅需 3 个节点即可构成最小生产集群,且通信协调基于 Raft 协议,增强了一致性。KRaft 模式中,Controller 使用单线程处理请求,通过 KRaft 保持内存状态与多节点一致性。此外,Broker 根据 KRaft 记录更新元数据,实现声明式管理,提高集群协调效率。KRaft 的引入是集群协调机制的演进,采用事件驱动模型实现元数据的一致性。
155 1
Kafka 如何基于 KRaft 实现集群最终一致性协调
|
2月前
|
消息中间件 存储 负载均衡
Kafka高可用性指南:提高数据一致性和集群容错能力!
**Kafka高可用性概览** - 创建Topic时设置`--replication-factor 3`确保数据冗余和高可用。 - 分配角色:Leader处理读写,Follower同步数据,简化管理和客户端逻辑。 - ISR(In-Sync Replicas)保持与Leader同步的副本列表,确保数据一致性和可靠性。 - 设置`acks=all`保证消息被所有副本确认,防止数据丢失,增强一致性。 - 通过这些机制,Kafka实现了分布式环境中的数据可靠性、一致性及服务的高可用性。
304 0