在Ubuntu机器上部署Kafka消息队列
步骤
- 安装依赖 ZooKeeper
- 安装Kafka
- 配置Kafka
- 启动和停止Kafka
- 测试Kafka
1 依赖: 安装ZooKeeper
apt-get update apt-get install zookeeper
配置文件在 /etc/zookeeper/conf
目录下
如果是单机不需要额外配置,有多个ZK请配置server.n
地址。
# ls configuration.xsl environment log4j.properties myid zoo.cfg
2 安装Kafka
mkdir kafka cd kafka wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz tar -xzf kafka_2.12-0.10.2.0.tgz --strip 1
解压到当前目录
3 配置Kafka
配置文件路径 ~/kafka/config/server.properties
默认情况下,Kafka不允许您删除主题。 要能够删除主题,请在文件末尾添加以下行:
delete.topic.enable = true
远程访问需要加上主机名
advertised.host.name=对外IP地址
以及ZooKeeper地址
zookeeper.connect=ZooKeeper对外IP地址:2181
4 启动和停止Kafka
启动Kafka
配置启动脚本 start_kafka.sh
,使用启动脚本主要是为了让它在后台运行
#!/bin/bash echo "Begin to start kafka" nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 & echo "......"
设置权限
chmod a+x start_kafka.sh
启动Kafka
./start_kafka.sh
可以在~/kafka/kafka.log
日志文件中看到启动日志输出
停止Kafka
~/kafka/bin/kafka-server-stop.sh
5 测试Kafka
发布和消费一个"Hello World"的消息,以确保Kafka服务器正常运作。
使用两个不同终端
消费终端
~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic helloTopic --from-beginning
发布终端
echo "Hello,World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic helloTopic > /dev/null
发布终端的输出
$ echo "Hello,World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic helloTopic > /dev/null [2017-12-10 21:51:14,053] WARN Error while fetching Metadata with correlation id 1 : {helloTopic=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
没有helloTopic
这个topic,会自动创建一个。
消费终端的输出
$ ~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic helloTopic --from-beginning Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper]. Hello,World
收到"Hello,World"消息了。
这样表示服务器配置好了。
原文链接:https://www.f2er.com/ubuntu/350342.html如果需要远程访问的话,要注意设置
advertised.host.name
和zookeeper.connect
,都要使用对外的IP地址。