Kafka集群安装部署以及Producer和Consumer的JAVA代码测试
kafka scala2.11_0.10.0.0
ubuntu 14.04.04 x64
hadoop 2.7.2
1、下载
二进制包
https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz
2、解压
root@py-server:/server# tar xvzf kafka_2.11-0.10.0.0.tgz
root@py-server:/server# mv kafka_2.11-0.10.0.0/ kafka/
3、环境变量
vi ~/.bashrc
export KAFKA_HOME=/server/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source ~/.bashrc
4、配置文件
config/server.properties
root@py-server:/server/kafka/config# vi server.properties
参考:
http://blog.youkuaiyun.com/z769184640/article/details/51585419
# 唯一标识一个broker.
broker.id=0
#绑定服务监听的地址和端口,要填写hostname -i 出来的地址,否则可能会绑定到127.0.0.1,producer可能会发不出消息
listeners=PLAINTEXT://10.1.1.6:9092
#advertised.listeners=PLAINTEXT://your.host.name:9092
advertised.listeners=PLAINTEXT://10.1.1.6:9092
【不设置会出现3tries链接错误】
#存放日志和消息的目录,可以是用逗号分开的目录,同样不推荐使用/tmp【此处没改动,我的还是tmp】
log.dirs=/usr/local/services/kafka/kafka-logs
#每个topic默认partitions的数量,数量较大表示消费者可以有更大的并行度。
num.partitions=2
#Zookeeper的连接配置,用逗号隔开,也可以用10.1.1.6:2181/kakfa这样的方式指定kafka数据在zk中的根目录
zookeeper.connect=10.1.1.6:2181,10.1.1.11:2181,10.1.1.12:2181,10.1.1.13:2181,10.1.1.14:2181
5、分发
拷贝到其他机上
root@py-server:/server# scp -r kafka/ root@10.1.1.11:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.12:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.13:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.14:/server/
修改11-14的环境变量和配置文件,改动的地方如下:
broker.id=1~4[另外四台]
listeners=PLAINTEXT://10.1.1.11~14[另外四台]:9092
6、启动
首先,启动zookeeper集群,启动方法参考spark安装部署那一篇。
然后,再启动每个kafka节点
root@py-server:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-11:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-12:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-13:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-14:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
-daemon放在后台运行。
【注意:不要直接用kafka-server-start.sh -daemon config/server.properties】
可见:
root@py-14:/server/kafka# jps
1203 Kafka
551 DataNode
2124 Jps
701 NodeManager
911 Worker
28063 SparkSubmit
383 QuorumPeerMain
root@py-14:/server/kafka#
其他机一样
root@py-server:/server/kafka# jps
18592 NodeManager
7456 Main
18867 Worker
9780 Kafka
17894 DataNode
18073 SecondaryNameNode
18650 Master
17499 QuorumPeerMain
9837 Jps
18269 ResourceManager
17725 NameNode
7、测试
7.1 测试单机topic
7.1.1 创建一个topic名为my-test
root@py-server:/server/kafka# bin/kafka-topics.sh --create --zookeeper 10.1.1.6:2181 --replication-factor 3 --partitions 1 --topic my-test
Created topic "my-test".
#replication-factor是备份数
#partition是分区数
7.1.2 发送消息,ctrl+c终止
root@py-server:/server/kafka# bin/kafka-console-producer.sh --broker-list 10.1.1.6:9092 --topic my-test
今天是个好日子
hello
^Croot@py-server:/server/kafka#
7.1.3 另一台机器上消费消息
root@py-11:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.11:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-12:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.12:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-12:/server/kafka#
root@py-server:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.6:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-server:/server/kafka#
其他机一样
继续发送消息则在消费者终端会一直出现新产生的消息。
7.2 查看主题详细
root@py-server:/server/kafka/bin# ./kafka-topics.sh --describe --zookeeper 10.1.1.6:2181 --topic my-test
Topic:my-test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-test Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
root@py-14:/server/kafka# bin/kafka-topics.sh --describe --zookeeper 10.1.1.6:2181 --topic my-test
Topic:my-test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-test Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
7.3 用zookeeper查询
root@py-14:/server/zookeeper/bin# $ZOOKEEPER_HOME/bin/zkCli.sh
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
登录成功
[zk: localhost:2181(CONNECTED) 1] ls /
[controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]
[zk: localhost:2181(CONNECTED) 2] ls /brokers
[ids, topics, seqid]
[zk: localhost:2181(CONNECTED) 3] ls /brokers/ids
[0, 1, 2, 3, 4]
[zk: localhost:2181(CONNECTED) 4] ls /brokers/ids/0
[]
[zk: localhost:2181(CONNECTED) 5] ls /brokers/topics
[my-test]
[zk: localhost:2181(CONNECTED) 6] ls /brokers/topics/test/partitions
Node does not exist: /brokers/topics/test/partitions
[zk: localhost:2181(CONNECTED) 7] ls /brokers/topics/my-test/partitions
[0]
[zk: localhost:2181(CONNECTED) 8]
8、关闭kafka
pkill -9 -f server.properties
9、应用
参考:
0.10.0.0
方法和0.8有所不同,不能用0.8.x的例子
http://blog.youkuaiyun.com/louisliaoxh/article/details/51577117 主要
http://www.cnblogs.com/fxjwind/p/5646631.html 主要
http://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html
0.8.x 参考
http://chengjianxiaoxue.iteye.com/blog/2190488
http://www.open-open.com/lib/view/open1407942131801.html
http://blog.youkuaiyun.com/z769184640/article/details/51585419
http://wenku.baidu.com/view/7478cab24431b90d6d85c703.html?from=search
高阶:
http://blog.youkuaiyun.com/hxpjava1/article/details/19160665
http://orchome.com/11
【注意:网上的代码基本上都是缺这少那的,不能运行,下边11部分自己的代码是测试成功的,但是不保证其他人也能在自己的环境跑】
9.1 Producer代码【见附件11.1】
9.1.2 jar包
【maven参考:http://www.cnblogs.com/xing901022/p/4170248.html】
project->run-as->build[goal:compile或者pom.xml加一句pom.xml文件<build>标签后面加上<defaultGoal>compile</defaultGoal>即可 ]
eclipse->file->import->maven->existing maven projects->choose your project folder
选中左侧工程Kafka中的src/main/java/kafkaProducer.java
eclipse-file-export-java-jar file,选中右侧三个,还有export java source file and resources,选择保存的位置和名称,点next,点next,select the class of the application entry point,选择主类kafkaProducer.java 点finish,等待maven下载包并打包。
9.1.3 jar包(包含外部依赖包)
http://lvjun106.iteye.com/blog/1849803
9.2 Consumer代码【见附件】
9.2.2 jar包
步骤与9.1类似,kafkaProducer.java换成kafkaConsumer.java即可。
10. 测试
10.1 Producer类打包(含外部依赖包)
0.10.0.0测试
【MANIFEST.MF参考:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html】
普通的eclipse mave run as -> build 不含外部依赖包,如果用manifest.mf,则需要添加很多依赖包,很麻烦,用以下方法简单
需要在pom.xml的<project></project>内添加
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
kafka scala2.11_0.10.0.0
ubuntu 14.04.04 x64
hadoop 2.7.2
spark 2.0.0
scala 2.11.8
jdk 1.8.0_101
zookeeper 3的集群安装参考spark安装部署中的相应部分。1、下载
二进制包
https://www.apache.org/dyn/closer.cgi?path=/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz
2、解压
root@py-server:/server# tar xvzf kafka_2.11-0.10.0.0.tgz
root@py-server:/server# mv kafka_2.11-0.10.0.0/ kafka/
3、环境变量
vi ~/.bashrc
export KAFKA_HOME=/server/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source ~/.bashrc
4、配置文件
config/server.properties
root@py-server:/server/kafka/config# vi server.properties
参考:
http://blog.youkuaiyun.com/z769184640/article/details/51585419
# 唯一标识一个broker.
broker.id=0
#绑定服务监听的地址和端口,要填写hostname -i 出来的地址,否则可能会绑定到127.0.0.1,producer可能会发不出消息
listeners=PLAINTEXT://10.1.1.6:9092
#advertised.listeners=PLAINTEXT://your.host.name:9092
advertised.listeners=PLAINTEXT://10.1.1.6:9092
【不设置会出现3tries链接错误】
#存放日志和消息的目录,可以是用逗号分开的目录,同样不推荐使用/tmp【此处没改动,我的还是tmp】
log.dirs=/usr/local/services/kafka/kafka-logs
#每个topic默认partitions的数量,数量较大表示消费者可以有更大的并行度。
num.partitions=2
#Zookeeper的连接配置,用逗号隔开,也可以用10.1.1.6:2181/kakfa这样的方式指定kafka数据在zk中的根目录
zookeeper.connect=10.1.1.6:2181,10.1.1.11:2181,10.1.1.12:2181,10.1.1.13:2181,10.1.1.14:2181
5、分发
拷贝到其他机上
root@py-server:/server# scp -r kafka/ root@10.1.1.11:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.12:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.13:/server/
root@py-server:/server# scp -r kafka/ root@10.1.1.14:/server/
修改11-14的环境变量和配置文件,改动的地方如下:
broker.id=1~4[另外四台]
listeners=PLAINTEXT://10.1.1.11~14[另外四台]:9092
6、启动
首先,启动zookeeper集群,启动方法参考spark安装部署那一篇。
然后,再启动每个kafka节点
root@py-server:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-11:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-12:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-13:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
root@py-14:/server/kafka# ./bin/kafka-server-start.sh -daemon config/server.properties
-daemon放在后台运行。
【注意:不要直接用kafka-server-start.sh -daemon config/server.properties】
可见:
root@py-14:/server/kafka# jps
1203 Kafka
551 DataNode
2124 Jps
701 NodeManager
911 Worker
28063 SparkSubmit
383 QuorumPeerMain
root@py-14:/server/kafka#
其他机一样
root@py-server:/server/kafka# jps
18592 NodeManager
7456 Main
18867 Worker
9780 Kafka
17894 DataNode
18073 SecondaryNameNode
18650 Master
17499 QuorumPeerMain
9837 Jps
18269 ResourceManager
17725 NameNode
7、测试
7.1 测试单机topic
7.1.1 创建一个topic名为my-test
root@py-server:/server/kafka# bin/kafka-topics.sh --create --zookeeper 10.1.1.6:2181 --replication-factor 3 --partitions 1 --topic my-test
Created topic "my-test".
#replication-factor是备份数
#partition是分区数
7.1.2 发送消息,ctrl+c终止
root@py-server:/server/kafka# bin/kafka-console-producer.sh --broker-list 10.1.1.6:9092 --topic my-test
今天是个好日子
hello
^Croot@py-server:/server/kafka#
7.1.3 另一台机器上消费消息
root@py-11:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.11:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-12:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.12:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-12:/server/kafka#
root@py-server:/server/kafka# bin/kafka-console-consumer.sh --zookeeper 10.1.1.6:2181 --from-beginning --topic my-test
今天是个好日子
hello
^CProcessed a total of 2 messages
root@py-server:/server/kafka#
其他机一样
继续发送消息则在消费者终端会一直出现新产生的消息。
7.2 查看主题详细
root@py-server:/server/kafka/bin# ./kafka-topics.sh --describe --zookeeper 10.1.1.6:2181 --topic my-test
Topic:my-test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-test Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
root@py-14:/server/kafka# bin/kafka-topics.sh --describe --zookeeper 10.1.1.6:2181 --topic my-test
Topic:my-test PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-test Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
7.3 用zookeeper查询
root@py-14:/server/zookeeper/bin# $ZOOKEEPER_HOME/bin/zkCli.sh
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
登录成功
[zk: localhost:2181(CONNECTED) 1] ls /
[controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]
[zk: localhost:2181(CONNECTED) 2] ls /brokers
[ids, topics, seqid]
[zk: localhost:2181(CONNECTED) 3] ls /brokers/ids
[0, 1, 2, 3, 4]
[zk: localhost:2181(CONNECTED) 4] ls /brokers/ids/0
[]
[zk: localhost:2181(CONNECTED) 5] ls /brokers/topics
[my-test]
[zk: localhost:2181(CONNECTED) 6] ls /brokers/topics/test/partitions
Node does not exist: /brokers/topics/test/partitions
[zk: localhost:2181(CONNECTED) 7] ls /brokers/topics/my-test/partitions
[0]
[zk: localhost:2181(CONNECTED) 8]
8、关闭kafka
pkill -9 -f server.properties
9、应用
参考:
0.10.0.0
方法和0.8有所不同,不能用0.8.x的例子
http://blog.youkuaiyun.com/louisliaoxh/article/details/51577117 主要
http://www.cnblogs.com/fxjwind/p/5646631.html 主要
http://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html
0.8.x 参考
http://chengjianxiaoxue.iteye.com/blog/2190488
http://www.open-open.com/lib/view/open1407942131801.html
http://blog.youkuaiyun.com/z769184640/article/details/51585419
http://wenku.baidu.com/view/7478cab24431b90d6d85c703.html?from=search
高阶:
http://blog.youkuaiyun.com/hxpjava1/article/details/19160665
http://orchome.com/11
【注意:网上的代码基本上都是缺这少那的,不能运行,下边11部分自己的代码是测试成功的,但是不保证其他人也能在自己的环境跑】
9.1 Producer代码【见附件11.1】
9.1.2 jar包
【maven参考:http://www.cnblogs.com/xing901022/p/4170248.html】
project->run-as->build[goal:compile或者pom.xml加一句pom.xml文件<build>标签后面加上<defaultGoal>compile</defaultGoal>即可 ]
eclipse->file->import->maven->existing maven projects->choose your project folder
选中左侧工程Kafka中的src/main/java/kafkaProducer.java
eclipse-file-export-java-jar file,选中右侧三个,还有export java source file and resources,选择保存的位置和名称,点next,点next,select the class of the application entry point,选择主类kafkaProducer.java 点finish,等待maven下载包并打包。
9.1.3 jar包(包含外部依赖包)
http://lvjun106.iteye.com/blog/1849803
9.2 Consumer代码【见附件】
9.2.2 jar包
步骤与9.1类似,kafkaProducer.java换成kafkaConsumer.java即可。
10. 测试
10.1 Producer类打包(含外部依赖包)
0.10.0.0测试
【MANIFEST.MF参考:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html】
普通的eclipse mave run as -> build 不含外部依赖包,如果用manifest.mf,则需要添加很多依赖包,很麻烦,用以下方法简单
需要在pom.xml的<project></project>内添加
<build>
<defaultGoal>compile</defaultGoal>
<plugins>