转自http://zhangfengzhe.blog.51cto.com/8855103/1556650
1.前言
由于项目涉及到kafka,自己以前没有接触过这方面的,学习了下,将搭建kafka运行环境同大家分享。
2.搭建步骤
第一步,到Apache Kafka官网下载最新的压缩包,比如我下载的就是:
第二步,解压并启动Zookeeper
1
2
3
|
tar -xzvfkafka_2.9.2-0.8.1.1.tgz
cd kafka_2.9.2-0.8.1.1
bin /zookeeper-server-start .shconfig /zookeeper .properties&
|
说明:
-
由于kafka用到了zookeeper,所以应该首先启动它。
-
应该确保已经安装JDK,并设定好JAVA_HOME,CLASSPATH,PATH这些环境变量。否则会提示:
java command not found
查看端口信息:
查看zookeeper.properties配置信息:
第三步:启动kafka
1
|
bin /kafka-server-start .shconfig /server .properties
|
我在启动中遇到了下面的2个问题:
Unrecognized VM option '+UseCompressedOops'
原因及解决办法:
kafka用了很多优化运行的jvm参数,而我安装的jdk所带的jvm不一定支持这些参数,比如:
-XX:+UseCompressedOops
所以需要编辑kafka-run-class.sh,将这个选项注释掉:
1
2
3
4
5
|
KAFKA_JVM_PERFORMANCE_OPTS="-server-XX:+UseCompressedOops-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+DisableExplicitGC-Djava.awt.headless= true "
|
Error occurred during initialization of VM Could not reserve enough space for object
heap
原因及解决办法:
查看kafka-server-start.sh配置文件,发现有heap设置信息:
1
|
export KAFKA_HEAP_OPTS= "-Xmx1G-Xms1G"
|
我们可以java -X来看看这些参数的意义:
-Xms表示JAVA堆内存的初始化大小,而-Xmx表示最大值。
我在创建虚拟机时,指定的内存大小为256M,很显然不够,因此我尝试改为:
但是依然报错,看来这个参数不能调到这么小,最后我将虚拟机内存调到1G,启动成功。
注意输出信息中,端口信息:9092
进程验证:
端口验证:
说明:
Kafka的进程ID为9300,占用端口为9092
QuorumPeerMain为对应的zookeeper实例,进程ID为6379,在2181端口监听
|
3.一些基本概念
记住几个关键点,分布式、高吞吐量 的 订阅、发布 消息系统
producer 消息的生成者,即发布消息
consumer 消息的消费者,即订阅消息
broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker
zookeeper 协调转发
producers通过网络将消息发送到Kafka集群,集群向消费者提供消息
kafka对消息进行归纳,即topic,也就是说producer发布topic,consumer订阅topic
下面,我们来一个初步的测试,来加深这些概念的理解。
|
4.模拟客户端发送、接受消息初步测试
Step 1 : 创建一个topic
命令运行后提示:
Created topic "my_first_topic".
注意,创建topic时需要指明zookeeper的socket(IP+PORT)在哪里,以及topic名称。
(至于partitions,replication-factor这些分区,副本的概念以后再说,暂放)
此时:
zookeeper进程提示:
kafka进程提示:
Step 2 : 查看topic list
Step 3 : 发送、接受消息
下面,我启动2个XSHELL客户端,一个用于生产者发送消息,一个用于消费者接受消息。
XSHELL-A
XSHELL-B
只要我们在XSHELL-A中输入消息回车,那么马上XSHELL-B中就会有消息显示。
注意:
producer,指定的Socket(localhost+9092),说明生产者的消息要发往kafka,也即是broker
consumer, 指定的Socket(localhost+2181),说明消费者的消息来自zookeeper(协调转发)
上面的只是一个单个的broker,下面我们来实验一个多broker的集群。
|
5.搭建一个多个broker的集群
刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点
也都是在本机上的
Step 1 : 为每一个broker提供配置文件
我们先看看config/server.properties配置信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@localhostconfig]
broker. id =0
port=9092
num.network.threads=2
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log. dirs = /tmp/kafka-logs
num.partitions=2
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner. enable = false
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=1000000
|
说明:
broker.id为集群中唯一的标注一个节点,因为在同一个机器上,所以必须指定不同的
端口和日志文件,避免数据被覆盖。
在上面单个broker的实验中,为什么kafka的端口为9092,这里可以看得很清楚。
注意日志目录:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhostkafka-logs]
/tmp/kafka-logs
[root@localhostkafka-logs]
total32
drwxr-xr-x2rootroot4096Sep2022:58my_first_topic-0
-rw-r--r--1rootroot32Sep2023:54recovery-point-offset-checkpoint
-rw-r--r--1rootroot32Sep2023:54replication-offset-checkpoint
drwxr-xr-x2rootroot4096Sep2020:22 test -0
[root@localhostkafka-logs]
my_first_topic-0
|--00000000000000000000.index
`--00000000000000000000.log
0directories,2files
|
【topic,分区,offset等等这些概念,暂放】
kafka cluster怎么同zookeeper交互的,配置信息中也有体现。
那么下面,我们仿照上面的配置文件,提供2个broker的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
[root@localhostconfig]
broker. id =1
port=9093
log. dir = /tmp/kafka-logs-1
zookeeper.connect=localhost:2181
[root@localhostconfig]
broker. id =2
port=9094
log. dir = /tmp/kafka-logs-2
zookeeper.connect=localhost:2181
|
Step 2 : 启动所有的broker
由于在上面的实验中,已经启动了zookeeper和一个broker(id=0),那么现在只需要启动
broker(id=1)和broker(id=2)。
命令如下:
1
2
|
bin /kafka-server-start .shconfig /server-2 .properties&
bin /kafka-server-start .shconfig /server-1 .properties&
|
会发现,zookeeper进程会有提示信息输出。
进程,端口观察:
一个zookeeper在2181端口上监听,3个kafka cluster(broker)分别在端口
9092,9093,9094监听。
Step 3 : 创建topic
1
2
3
4
5
6
|
bin /kafka-topics .sh--create--topictopic_1--partitions1--replication-factor3\
--zookeeperlocalhost:2181
bin /kafka-topics .sh--create--topictopic_2--partitions1--replication-factor3\
--zookeeperlocalhost:2181
bin /kafka-topics .sh--create--topictopic_3--partitions1--replication-factor3\
--zookeeperlocalhost:2181
|
查看topic创建情况:
上面的有些东西,也许还不太清楚,暂放,继续试验。需要注意的是topic_1的Leader=1
Step 4 : 模拟客户端发送,接受消息
XSHELL-A
1
|
bin /kafka-console-consumer .sh--topictopic_1--zookeeperlocalhost:2181--from-beginning
|
XSHELL-B
1
2
|
bin /kafka-console-producer .sh--topictopic_1--broker-listlocalhost:9092,localhost:9093,
localhost:9094
|
需要注意,此时producer将topic发布到了3个broker中,现在分布式的概念就有点了。
在XSHELL-B中发消息,XSHELL-A中就会有消息显示出来。
Step 5 : kill some broker
测试点一:
kill broker(id=0)
首先,我们根据前面的配置,得到broker(id=0)应该在9092监听,这样就能确定它的PID了。
得到broker(id=0)的PID为9300,那么接下来,我们KILL这个broker:
再次观察,topic在kafka cluster中的情况:
需要与broker(id=0)没有被kill前,做下对比。很明显,主要变化在于Isr,以后在分析。
测试下,发送消息,接受消息,是否收到影响。
生产者:
消费者:
结论,并没有收到影响。
测试点二:
kill broker(id=1)
同上可以得到broker(id=1)的PID为21165,同样的kill它,并测试发送,接受消息
是否收到影响。
发送端:
接受端:
可见,kafka的分布式机制,容错能力还是挺好的~
|
分享到:
相关推荐
自己搭建的kafka开发环境,其中会参考其他的文档《03_重新设置maven的本地库位置...这个开发环境的搭建包括Kafka集群,zookeeper集群的搭建,开发环境是搭建在windows中的eclipse,在eclipse中开发的代码可以直接运行。
本文将详细讲解如何搭建 Kafka 开发环境,包括 Scala 环境的配置、Eclipse 中的 Scala 开发环境安装以及依赖包的管理。 首先,你需要对 Kafka 的功能有基本的了解,理解其分布式工作原理。Kafka 通常作为日志系统...
总的来说,搭建Kafka Java开发环境,主要是通过Maven在`pom.xml`中配置合适的Kafka依赖,并利用Maven自动管理这些依赖,确保项目的正常运行。同时,了解Kafka的基本概念和使用方式,有助于更好地开发基于Kafka的应用...
在Windows系统中搭建Kafka环境涉及多个步骤,包括下载、解压、修改配置文件和修改启动文件。本指南将帮助初学者一步步完成搭建过程。 一、下载并解压Kafka 首先,前往Apache Kafka的官方网站下载最新版本的Kafka二...
本篇文档将详细介绍如何在Linux环境中搭建Kafka集群,同时结合Hadoop和Spark的分布式安装,构建一个完整的数据处理平台。 首先,搭建Kafka集群的基础条件包括: 1. 至少一台Linux服务器,但为了高可用性,推荐多台...
Kafka运行在Java平台上,因此首先确保你的机器上安装了JDK 8或更高版本。可以从Oracle官网下载并安装。 ### 2. 下载Kafka 访问Apache Kafka官方网站(https://kafka.apache.org/downloads)下载最新稳定版的Kafka,...
其中,集成测试release目录下带有对应的kafka运行库 zlib运行库。程序编译好之后可以直接运行测试。编译使用vs2015 32 位环境。 运行需要依赖搭建好的kafka服务器 搭建kafka服务器的文章可以从网上获取。 如果需要...
要搭建 Kafka 环境,需要首先解压 Kafka 资源包并创建 logs 文件夹。然后,需要修改配置文件 server.properties,设置 broker 的全局唯一编号、是否允许删除 topic、处理网络请求的线程数量、用来处理磁盘 IO 的线程...
以下是如何在Linux上搭建Kafka集群的详细步骤,主要围绕Zookeeper集群的配置和启动。 首先,你需要至少三台Linux服务器,因为Zookeeper集群通常由奇数台服务器组成,以确保在任何情况下都能保持多数节点的存活,...
本文档将详细介绍如何在三台Ubuntu 16虚拟机上搭建Kafka集群,并进行基本的测试,确保其正常运行。 **1. 准备工作** 在开始之前,你需要准备三台配置了Ubuntu 16.04操作系统的虚拟机,IP地址分别为192.168.172.145...
搭建Kafka集群涉及到对虚拟机的安装配置、JDK环境的搭建、Zookeeper的安装配置等关键步骤。下面详细介绍各个知识点。 首先,虚拟机的安装是搭建Kafka集群的基础。文中提到了使用VMWare来安装三台虚拟机,并分配了...
以下是基于Zookeeper搭建Kafka高可用集群的详细步骤和关键知识点: 一、Zookeeper集群搭建 1.1 下载 & 解压 首先,你需要下载Zookeeper的最新稳定版本。在本例中,使用的是3.4.14版本。确保在所有服务器上安装相同...
在分布式环境中,通常需要多台服务器来运行Kafka集群,但为了测试或学习目的,可以使用单机上的伪分布式设置,这使得开发者能够在本地环境中快速搭建Kafka实例,而无需复杂的网络配置。 标签中的“kafka”、...
首先准备了基本的运行环境,接着安装了必要的软件(Java、Zookeeper和Kafka),并对各组件进行了详细的配置。最后通过创建主题、发送与接收消息的方式验证了集群的成功搭建。通过这种方式,用户可以获得一个高可用且...
在这个环境中,我们将讨论如何搭建 Apache Kafka 0.10.20 的简单环境,并运行 Java Demo。 首先,我们需要下载 Kafka 0.10.20 的发行版,可以从 Apache 官方网站或者 Maven 存储库获取。解压缩后,你会看到一个包含...
在Windows环境下搭建Kafka集群可以帮助开发者在本地环境中快速测试和开发相关的流处理应用。以下是一份详细的步骤指南,帮助你了解如何在Windows上安装并运行Kafka集群。 1. **获取和解压Kafka** 首先,你需要从...
Kafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper 1.1 下载安装文件: http://mirror.bit.edu.cn/apache/zookeeper/ 1.2 解压文件(本文解压到 D:\profession\zookeeper\zookeeper-...
接下来,我们要准备搭建Kafka环境。Kafka是一个分布式流处理平台,常用于实时数据处理和消息传递。这里我们简要概述一下Kafka的安装步骤: 1. **下载Kafka**: 从Apache Kafka的官方网站下载最新或特定版本的Kafka...