Kafka是一个分布式流媒体平台,Kafka作为一个集群运行在一台或多台可以跨越多个数据中心的服务器上。
Kafka集群在称为主题的类别中存储记录流。每个记录由一个键,一个值和一个时间戳组成。
第1步:下载代码
下载地址 https://www.apache.org/dyn/closer.cgi?path=/kafka/1.1.0/kafka_2.11-1.1.0.tgz
下载完后上传到linux服务器总解压
tar -zxvf kafka_2.11-1.1.0.tgz
cd kafka_2.11-1.1.0
第二步 启动服务器
Kafka使用ZooKeeper,因此如果没有启动ZooKeeper服务器,需要首先启动ZooKeeper服务器。可以使用与kafka打包在一起的便捷脚本来获得快速且简单的单节点ZooKeeper实例。
启动zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
启动启动 Kafka
bin/kafka-server-start.sh -daemon config/server.properties
加上-daemon 可以让他们去后台运行
第3步:创建一个主题
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
运行list topic命令,我们现在可以看到该主题
> bin/kafka-topics.sh --list --zookeeper localhost:2181
test
可以看到输出 test
第4步:发送一些消息(生产数据)
Kafka带有一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每行将作为单独的消息发送。
运行生产者,然后在控制台中输入几条消息发送到服务器。
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
hello kafka
第5步:启动消费者
kafka也有一个命令行消费者,将消息转储到标准输出。
另外启动⼀个终端消费数据
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello kafka
第6步:设置多代理群集
上面的操作只是在同一台机器上运行,我们一般情况下都是使用分布式的在多台机器上设置。这里使用3台机器 master , slave , slave2
把master中kafka的解压文件分别复制道slave 和 slave2节点中。
scp -r kafka_2.11-1.1.0 slave:/home/chs/software
scp -r kafka_2.11-1.1.0 slave2:/home/chs/software
配置slave和slave2中kafka下的config/server.properties文件
进入config文件夹中 vim server.properties
slave节点上
broker.id=1
zookeeper.connect=master:2181
slave2节点上
broker.id=2
zookeeper.connect=master:2181
各节点分别启动 Zookeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
各节点分别启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
创建一个新的主题:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
跟上面一样产生一些新的数据给这个新主题
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
...
my test message 1
my test message 2
另外启动⼀个终端消费数据
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
...
my test message 1
my test message 2
OK测试成功,现在我们是在一个集群上布置了kafka ,我们该怎么知道每个broker 在做什么呢?运行下面的命令
[root@master kafka_2.11-1.1.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 1,2
[root@master kafka_2.11-1.1.0]#
上面的输出中
“leader” : 负责给定分区的所有读写操作的节点。这个领导者是随机选择出来的。上面的例子中就选择了2当做leader,也就是slave2中的kafka。
“replicas” : 是复制此分区的日志的节点列表。
“isr” : 是一组“同步”副本。这是复制品列表的子集,目前活着并被引导到leader身边。
如果我们在最开始创建的test主题上运行这个命令
[root@master kafka_2.11-1.1.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
[root@master kafka_2.11-1.1.0]#
因为那时候还没有配置集群,他的副本数就是0
下面来看一下kafka的容错机制
上面的集群中我们可以看到leader是2也就是slave2中的kafka。下面我们去slave2中把kafka的进程杀掉
[root@slave2 kafka_2.11-1.1.0]# jps
2493 Kafka
2542 Jps
2175 QuorumPeerMain
[root@slave2 kafka_2.11-1.1.0]# kill -9 2493
这个时候master中会看到一些日志
2018-06-07 17:36:11,807] WARN [Consumer clientId=consumer-1, groupId=console-consumer-831] Connection to node 2 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2018-06-07 17:36:11,912] WARN [Consumer clientId=consumer-1, groupId=console-consumer-831] Connection to node 2 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2018-06-07 17:36:12,150] WARN [Consumer clientId=consumer-1, groupId=console-consumer-831] Connection to node 2 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
意思是连不上节点2了
这个时候在查看其属性描述
[root@master kafka_2.11-1.1.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 0 Replicas: 2,0,1 Isr: 0,1
[root@master kafka_2.11-1.1.0]#
leader变成了0,并且节点2不在同步副本中。
kafka的简单配置就到这啦。