Ubuntu及windows下kafka集群环境搭建及测试
kafka介绍:
-
通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
-
支持通过Kafka服务器和消费机集群来分区消息。
-
支持Hadoop并行数据加载。[3]
Kafka相关术语介绍
-
Broker
-
Topic每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
-
PartitionPartition是物理上的概念,每个Topic包含一个或多个Partition.
-
Producer负责发布消息到Kafka broker
-
Consumer消息消费者,向Kafka broker读取消息的客户端。
-
Consumer Group每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
单节点模式:
1,解压
root@Ubuntu-1:/usr/local# tar zxvf kafka_2.11-0.8.2.2.tgz
2,重命名
root@Ubuntu-1:/usr/local# mv /usr/local/kafka_2.11-0.8.2.2 /usr/local/kafka
3,起zookeeper集群到指定后台文件(不占用页面)
root@Ubuntu-1:/usr/local/kafka# bin/zookeeper-server-start.sh config/zookeeper.properties > logs/kafka131-1.log >&1 &
4,起kafka集群到指定后台文件(不占用页面)
bin/kafka-server-start.sh config/server.properties >logs/kafka131-server-1.log >&1 &
5,查看zookeeper和kafka启动情况
root@Ubuntu-1:/usr/local/kafka# jps 3104 QuorumPeerMain 5048 Kafka 5064 Jps
6,新增一个topic
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --create --topic huxing --zookeeper localhost:2181 --partitions 2 --replication 1 Created topic "huxing".
7,所有可以使用的topic
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --list --zookeeper localhost:2181 huxing
8,查询某个topic的信息
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --describe --topic huxing --zookeeper localhost:2181 Topic:huxing PartitionCount:2 ReplicationFactor:1 Configs: Topic: huxing Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Topic: huxing Partition: 1 Leader: 0 Replicas: 0 Isr: 0
9,删除某个topic
在此之前需要在server.properties的配置文件中加入一行
delete.topic.enable=true
重启,然后执行代码
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --delete --topic huxing --zookeeper localhost:2181 Topic huxing is marked for deletion. Note: This will have no impact if delete.topic.enable is not set to true. root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --list --zookeeper localhost:2181 hello world
在jps中可以查询到确实已经被删除了
10,创建producer和consumer用户
在创建producer用户时,出现下列错误:
解决办法:在server.properties的配置文件中加入一行
advertised.host.name=192.168.22.131
在server.properties 上该参数用来配置返回的host.name值,把这个参数配置为外网IP地址。
这个参数默认没有启用,默认是返回的 java.net.InetAddress.getCanonicalHostName 的值,这个值并不等于 hostname 的值而是返回IP,但在linux上这个值就是 hostname 的值。
配置好后重启,在两个shell框中输入下列命令:
producer:
root@Ubuntu-1:/usr/local/kafka# bin/kafka-console-producer.sh --topic hello --broker-list localhost:9092 [2017-07-12 18:27:09,916] WARN Property topic is not valid (kafka.utils.VerifiableProperties) aa aaa 1 222
consumer:
root@Ubuntu-1:/usr/local/kafka# bin/kafka-console-consumer.sh --topic hello --zookeeper localhost:2181
于是,在producer的shell框中输入的内容将会同步更新到consumer中
标记删除的topic也可以使用
--------------------------------------------
集群模式:
由于我用kafka中内置的zookeeper怎么配置也无法启动,所以打算放弃kafka中内置的ZK,转而自己去下载
zookeeper
1,解压压缩包
2,进入zookeeper目录下的conf子目录, 创建zoo.cfg文本文件,内容如下:
initLimit=5 tickTime=2000 syncLimit=2 dataDir=/usr/local/zookeeper/data dataLogDir=/usr/local/zookeeper/logs clientPort=2181 server.1=192.168.22.131:2888:3888 server.2=192.168.22.132:2888:3888 server.3=192.168.22.135:2888:3888
三个服务器上都是一样的内容
参数说明:
- tickTime: zookeeper中使用的基本时间单位, 毫秒值.
- dataDir: 数据目录. 可以是任意目录.
- dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
- clientPort: 监听client连接的端口号.
3,在配置的dataDir目录下,创建myid文本文件,内容为server.1等的”.”后的数字相同,每个服务器下的myid文件都不相同
kafka:
1,在server.propoties文件中更改:
启动:
启动zookeeper服务器(三台):
bin/zkServer.sh start
启动kafka服务器(三台):
bin/kafka-server-start.sh config/server.properties
创建topic:
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --create --topic huxing2 --zookeeper 192.168.22.131:2181,192.168.22.132:2181,192.168.22.135:2181 --replication-factor 3 --partitions 2 Created topic "huxing2".
列出可使用的topic:
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --list --zookeeper localhost:2181 huxing2
查询某个topic的信息:
root@Ubuntu-1:/usr/local/kafka# bin/kafka-topics.sh --describe --topic huxing2 --zookeeper localhost:2181 Topic:huxing2 PartitionCount:2 ReplicationFactor:3 Configs: Topic: huxing2 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2 Topic: huxing2 Partition: 1 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
从图中可以看出来,Partition分别存在不同的broker中,每个broker都不同,所以broker无副本
windows下运行kafka(自带zookeeper)
1,下载kafka
https://www.apache.org/dyn/closer.cgi?path=/kafka/2.2.1/kafka_2.11-2.2.1.tgz
2,解压到windows目录,并进入到该目录的cmd中
启动kafka自带的zookeeper
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
启动kafka
.\bin\windows\kafka-server-start.bat .\config\server.properties
创建topic主题:windows目录下面
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
创建生产者发送消息:windows目录下面
kafka-console-producer.bat --broker-list localhost:9092 --topic test
创建消费者消费消息:windows目录下面
kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
删除topic test
kafka-topics.bat --delete --topic test --bootstrap-server localhost:9092
查看topic
kafka-topics.bat --list --bootstrap-server localhost:9092