kafka单节点搭建(创建topic让producer为consumer提供消息)
kafka是一种高吞吐量的分布式发布订阅消息系统,了解topic创建然后producer提供消息给consumer
移除点击此处添加图片说明文字
在很多的场景我们使用到了kafka,现在我们开始搭建单机版本kafka,理论我们放到另一篇来说。
准备工作:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/c8c05466ec076b1b6d1d61b07c7df351.png)
上述的文件除了jdk以外均放在/usr/local/kafka目录下。
1、安装jdk,kafka的使用要用到jdk
首先检查有无jdk:java -version
cd /usr/local/hadoop(本例中我是将jdk的安装包放到hadoop文件夹下,各位可以依据自己情况)
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
将下载的安装包上传到服务器上的/usr/local/hadoop文件夹下
tar-zxvf jdk-7u79-linux-x64.tar.gz
配置jdk的环境变量:
vim /etc/profile
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8726a9ee29e06f2f9651e45eb7ace4c0.png)
使其立即生效 source /etc/profile
检查是否安装成功:java –version
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/e39a0010dfd2e36300888dc89641a875.png)
至此jdk安装配置成功。
2、安装zookeeper
cd /usr/local/kafka
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
tar -zxvf zookeeper-3.3.6.tar.gz
vim /etc/profile
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/2f8ea08a73e15d2bf7149373f4846e2e.png)
使之立即生效
source /etc/profile
测试zookeeper是否安装成功
cd /usr/local/zookeeper-3.3.6/bin
./zkServer.sh start
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/23fa18de7a58d371a8491107a519a458.png)
如上图所示,即为zookeeper安装配置成功
来看看zookeeper的图
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsflttky2j30m405o3za.jpg)
添加环境变量
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsfzismwaj30hx069wf5.jpg)
正确的目录 /usr/local/kafka/zookeeper-3.3.6/bin
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsgavoysxj30d605jq38.jpg)
zookeeper成功
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsgbuxybwj30ct038q32.jpg)
3、安装kafka
cd /usr/local/kafka
wget https://archive.apache.org/dist/kafka/0.8.0/kafka_2.8.0-0.8.0.tar.gz
tar -zxvf kafka_2.8.0-0.8.0.tar.gz
配置kafka,修改文件server.properties
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8cdb70286c79379b7c595d376cba7603.png)
vim server.properties
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0b0203f4597848150463e3c082fb14a.png)
将上图中的host.name处写上本地服务器的IP地址
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/3af0b6ca9ca406480eedb0d320ae0e30.png)
上图中的log.dirs结合自己所建的文件夹路径填写,没有严格要求
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/686d0ee93b00d1bb7749138dad6bcb3d.png)
上图中的红框处默认为2181端口
配置kafka下zookeeper
mkdir /usr/local/kafka/zookeeper #创建zookeeper目录
mkdir /usr/local/kafka/log/zookeeper #创建zookeeper日志目录
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
vim zookeeper.properties
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/428b41855db57088c239c955f0c9aee0.png)
上图中的dataDir和dataLogDir可以依据自己建立的文件夹路径填写。
这个中间有多少坑呢?走一趟才知道的。
首先这个网速,是真的垃圾,几k每秒,受不了了。
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsher36dhj30js0aemy2.jpg)
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
![](https://wx4.sinaimg.cn/large/005A3Hwygy1fhshlxjh16j30i60863yt.jpg)
kafka日志地址。
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsho18ruej30g5045aad.jpg)
这个是配置kafka配置zookeeper的路径和日志目录
4、创建启动和关闭kafka脚本
(1)创建kafka脚本
vim kafkastart.sh
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/4c0665626eb109d88847fddd3139bd06.png)
(2)创建关闭kafka脚本
vim kafkastop.sh
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/77e5451fb1b651900be04d957a5541f2.png)
(3)添加脚本执行权限
chmod +x kafkastart.sh
chmod +x kafkastop.sh
(4)设置脚本开机启动自动执行
vim /etc/rc.d/rc.local
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/0730327dbef851021a86722acfb25cda.png)
这个是干嘛的呢,是想弄一个完整的脚本来一起启动kafka和zookeeper的两个脚本的。我们照做就是了。
创建启动脚本
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/zookeeper-server-start.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/zookeeper.properties &
sleep 3
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/kafka-server-start.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/server.properties &
脚本结束脚本
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/zookeeper-server-stop.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/zookeeper.properties &
sleep 3
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/kafka-server-stop.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/server.properties &
然后我们设置开机自动执行脚本:
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastart.sh & #auto run in background
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastart.sh
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastop.sh
好了,gg。
5、测试kafka
(1)创建主题
cd /usr/local/kafka/kafka_2.8.0-0.8.0/bin
./kafka-create-topic.sh –partition 1 –replica 1 –zookeeper localhost:2181 –topic test
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/88a31e823a0e84aad3d1d64e3cb0f4de.png)
检查主题是否创建成功
./kafka-list-topic.sh –zookeeper localhost:2181
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/544372e3d9869ae696433b33761f4ac5.png)
(2)启动producer
./kafka-console-producer.sh –broker-list 192.168.18.229:9092 –topic test
(192.168.18.229是本地服务器IP地址,读者根据情况填写)
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/3e753fc82dbee92e00420dd481623ee1.png)
如上图所示,输入hello kafka!后,回车
然后另外打开一个shell终端
cd /usr/local/kafka/kafka_2.8.0-0.8.0/bin
在此终端下启动consumer
./kafka-console-consumer.sh –zookeeper localhost:2181 –topic test
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/85e63f4ba83c9abf6795eab2c8353e29.png)
由上图可见,终端1生产者下所输入的hello kafka!,在终端2下的消费者下显现,至此kafka的单机安装部署完成。
(6)关闭kafka
cd /usr/local/kafka
./kafkastop.sh
附:有可能遇到的问题和解决方案
问题1: Failed to acquire lock on file .
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/79562a8b47dfde65252b2baebe21702c.png)
解决方案:
这是因为之前已经有kafka进程在运行,可以如下:
通过jps命令查看进程号,并kill掉,然后重新启动kafka即问题解决
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/d5771702b536986df0387786f8cc34ed.png)
问题2:BindException: Address already in use
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/d8a641ad5add0c0d269ddc5cb87f412d.png)
解决方案:
这个有时可以忽略,只要最后成功启动了kafka就可以,也可以将server.properties下的2181的端口号换一下,这个报错是因为2181端口被占用了。
到目前为止都不知道对和错,那我们跑一下第五步吧,来看看效果。
./kafka-create-topic.sh -partition 1 -replica 1 -zookeeper localhost:2181 -topic test
坑果然接踵而至了。
![](https://wx4.sinaimg.cn/large/005A3Hwygy1fhsivx28ezj30jk0f9taa.jpg)
创建topic失败了,
creation failed because of org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
分析一下,就是zookeeper启动失败,于是乎,咱们是脚本没有启动啊,去启动一下。
于是乎,我们就找到那个zookeeper去启动了。
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsj0c0n89j30jl0ckjt0.jpg)
这就是起来的意思了,我们换个客户端,然后创建话题。
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsj25abxgj30jv02iweh.jpg)
可以了。
检查主题是否创建成功
./kafka-list-topic.sh -zookeeper localhost:2181
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsj30ms1kj30mp055aaf.jpg)
接着启动producer
./kafka-console-producer.sh -broker-list 10.20.50.25:9092 -topic test
( 10.20.50.25是本地服务器IP地址,读者根据情况填写)
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsjb0csdvj30iu02rt8o.jpg)
如上图所示,输入hello kafka!后,回车
然后另外打开一个shell终端
在此终端下启动consumer
./kafka-console-consumer.sh -zookeeper localhost:2181 -topic test
我们在producer里面提供消息
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsjhflwg4j30jo0cgaa7.jpg)
我们在consumer里面接受消息
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsjhuh4icj30jt0e2t9c.jpg)
好的,关于kafka的搭建到此结束。我把坑踩完了,可以吧。
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsjlkok5vj30sg0sg74i.jpg)
在很多的场景我们使用到了kafka,现在我们开始搭建单机版本kafka,理论我们放到另一篇来说。
准备工作:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/c8c05466ec076b1b6d1d61b07c7df351.png)
上述的文件除了jdk以外均放在/usr/local/kafka目录下。
1、安装jdk,kafka的使用要用到jdk
首先检查有无jdk:java -version
cd /usr/local/hadoop(本例中我是将jdk的安装包放到hadoop文件夹下,各位可以依据自己情况)
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
将下载的安装包上传到服务器上的/usr/local/hadoop文件夹下
tar-zxvf jdk-7u79-linux-x64.tar.gz
配置jdk的环境变量:
vim /etc/profile
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8726a9ee29e06f2f9651e45eb7ace4c0.png)
使其立即生效 source /etc/profile
检查是否安装成功:java –version
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/e39a0010dfd2e36300888dc89641a875.png)
至此jdk安装配置成功。
2、安装zookeeper
cd /usr/local/kafka
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz
tar -zxvf zookeeper-3.3.6.tar.gz
vim /etc/profile
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/2f8ea08a73e15d2bf7149373f4846e2e.png)
使之立即生效
source /etc/profile
测试zookeeper是否安装成功
cd /usr/local/zookeeper-3.3.6/bin
./zkServer.sh start
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/23fa18de7a58d371a8491107a519a458.png)
如上图所示,即为zookeeper安装配置成功
来看看zookeeper的图
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsflttky2j30m405o3za.jpg)
添加环境变量
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsfzismwaj30hx069wf5.jpg)
正确的目录 /usr/local/kafka/zookeeper-3.3.6/bin
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsgavoysxj30d605jq38.jpg)
zookeeper成功
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsgbuxybwj30ct038q32.jpg)
3、安装kafka
cd /usr/local/kafka
wget https://archive.apache.org/dist/kafka/0.8.0/kafka_2.8.0-0.8.0.tar.gz
tar -zxvf kafka_2.8.0-0.8.0.tar.gz
配置kafka,修改文件server.properties
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/8cdb70286c79379b7c595d376cba7603.png)
vim server.properties
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/a0b0203f4597848150463e3c082fb14a.png)
将上图中的host.name处写上本地服务器的IP地址
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/3af0b6ca9ca406480eedb0d320ae0e30.png)
上图中的log.dirs结合自己所建的文件夹路径填写,没有严格要求
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/686d0ee93b00d1bb7749138dad6bcb3d.png)
上图中的红框处默认为2181端口
配置kafka下zookeeper
mkdir /usr/local/kafka/zookeeper #创建zookeeper目录
mkdir /usr/local/kafka/log/zookeeper #创建zookeeper日志目录
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
vim zookeeper.properties
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/428b41855db57088c239c955f0c9aee0.png)
上图中的dataDir和dataLogDir可以依据自己建立的文件夹路径填写。
这个中间有多少坑呢?走一趟才知道的。
首先这个网速,是真的垃圾,几k每秒,受不了了。
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsher36dhj30js0aemy2.jpg)
cd /usr/local/kafka/kafka_2.8.0-0.8.0/config
![](https://wx4.sinaimg.cn/large/005A3Hwygy1fhshlxjh16j30i60863yt.jpg)
kafka日志地址。
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsho18ruej30g5045aad.jpg)
这个是配置kafka配置zookeeper的路径和日志目录
4、创建启动和关闭kafka脚本
(1)创建kafka脚本
vim kafkastart.sh
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/4c0665626eb109d88847fddd3139bd06.png)
(2)创建关闭kafka脚本
vim kafkastop.sh
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/77e5451fb1b651900be04d957a5541f2.png)
(3)添加脚本执行权限
chmod +x kafkastart.sh
chmod +x kafkastop.sh
(4)设置脚本开机启动自动执行
vim /etc/rc.d/rc.local
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/0730327dbef851021a86722acfb25cda.png)
这个是干嘛的呢,是想弄一个完整的脚本来一起启动kafka和zookeeper的两个脚本的。我们照做就是了。
创建启动脚本
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/zookeeper-server-start.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/zookeeper.properties &
sleep 3
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/kafka-server-start.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/server.properties &
脚本结束脚本
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/zookeeper-server-stop.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/zookeeper.properties &
sleep 3
/usr/local/kafka/kafka_2.8.0-0.8.0/bin/kafka-server-stop.sh /usr/local/kafka/kafka_2.8.0-0.8.0/config/server.properties &
然后我们设置开机自动执行脚本:
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastart.sh & #auto run in background
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastart.sh
sh /usr/local/kafka/kafka_2.8.0-0.8.0/kafkastop.sh
好了,gg。
5、测试kafka
(1)创建主题
cd /usr/local/kafka/kafka_2.8.0-0.8.0/bin
./kafka-create-topic.sh –partition 1 –replica 1 –zookeeper localhost:2181 –topic test
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/88a31e823a0e84aad3d1d64e3cb0f4de.png)
检查主题是否创建成功
./kafka-list-topic.sh –zookeeper localhost:2181
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/544372e3d9869ae696433b33761f4ac5.png)
(2)启动producer
./kafka-console-producer.sh –broker-list 192.168.18.229:9092 –topic test
(192.168.18.229是本地服务器IP地址,读者根据情况填写)
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/3e753fc82dbee92e00420dd481623ee1.png)
如上图所示,输入hello kafka!后,回车
然后另外打开一个shell终端
cd /usr/local/kafka/kafka_2.8.0-0.8.0/bin
在此终端下启动consumer
./kafka-console-consumer.sh –zookeeper localhost:2181 –topic test
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/85e63f4ba83c9abf6795eab2c8353e29.png)
由上图可见,终端1生产者下所输入的hello kafka!,在终端2下的消费者下显现,至此kafka的单机安装部署完成。
(6)关闭kafka
cd /usr/local/kafka
./kafkastop.sh
附:有可能遇到的问题和解决方案
问题1: Failed to acquire lock on file .
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/79562a8b47dfde65252b2baebe21702c.png)
解决方案:
这是因为之前已经有kafka进程在运行,可以如下:
通过jps命令查看进程号,并kill掉,然后重新启动kafka即问题解决
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/d5771702b536986df0387786f8cc34ed.png)
问题2:BindException: Address already in use
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/d8a641ad5add0c0d269ddc5cb87f412d.png)
解决方案:
这个有时可以忽略,只要最后成功启动了kafka就可以,也可以将server.properties下的2181的端口号换一下,这个报错是因为2181端口被占用了。
到目前为止都不知道对和错,那我们跑一下第五步吧,来看看效果。
./kafka-create-topic.sh -partition 1 -replica 1 -zookeeper localhost:2181 -topic test
坑果然接踵而至了。
![](https://wx4.sinaimg.cn/large/005A3Hwygy1fhsivx28ezj30jk0f9taa.jpg)
创建topic失败了,
creation failed because of org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
分析一下,就是zookeeper启动失败,于是乎,咱们是脚本没有启动啊,去启动一下。
于是乎,我们就找到那个zookeeper去启动了。
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsj0c0n89j30jl0ckjt0.jpg)
这就是起来的意思了,我们换个客户端,然后创建话题。
![](https://wx1.sinaimg.cn/large/005A3Hwygy1fhsj25abxgj30jv02iweh.jpg)
可以了。
检查主题是否创建成功
./kafka-list-topic.sh -zookeeper localhost:2181
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsj30ms1kj30mp055aaf.jpg)
接着启动producer
./kafka-console-producer.sh -broker-list 10.20.50.25:9092 -topic test
( 10.20.50.25是本地服务器IP地址,读者根据情况填写)
![](https://wx2.sinaimg.cn/large/005A3Hwygy1fhsjb0csdvj30iu02rt8o.jpg)
如上图所示,输入hello kafka!后,回车
然后另外打开一个shell终端
在此终端下启动consumer
./kafka-console-consumer.sh -zookeeper localhost:2181 -topic test
我们在producer里面提供消息
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsjhflwg4j30jo0cgaa7.jpg)
我们在consumer里面接受消息
![](https://wx3.sinaimg.cn/large/005A3Hwygy1fhsjhuh4icj30jt0e2t9c.jpg)
好的,关于kafka的搭建到此结束。我把坑踩完了,可以吧。