kafka安装
环境要求:需要安装zookeeper、java1.7以上。
下载kafka
注意:到Kafka官网下载安装文件时,一定要选择和自己电脑上已经安装的scala版本号一致才可以。本电脑安装的scala版本号是2.11.16,所以,一定要选择Kafka版本号是2.11开头的。比如,到Kafka官网中,可以下载安装文件kafka_2.11-0.10.1.0,前面的2.11就是支持的scala版本号,后面的0.10.1.0是Kafka自身的版本号。
解压安装包
sudo tar -zxvf kafka_2.11-0.10.1.0.tgz -C /usr/local/
cd /usr/local
sudo mv kafka_2.11-0.10.1.0/ kafka/
配置kafka配置文件
cd /usr/local/kafka/config/
sudo vi server.properties
port=9092
log.dirs=/usr/local/kafka/logs
zookeeper.connect=Master:2181,Slave1:2181
远程复制到其他节点
把配置好后的kafka目录远程复制到其他节点
sudo scp -r /usr/local/kafka Slave1:/usr/local/
在其他节点上修改borker id,默认为0,可修改为其他整数,borker id需要全局唯一,各个节点上不重复。
在各节点上赋予hadoop用户操作kafka目录的权限
cd /usr/local
sudo chown -R hadoop kafka/
启动kafka
在启动kafka之前,需要先启动zookeeper
再到每个节点上启动kafka服务
cd /usr/local/kafka
bin/kafka-server-start.sh config/server.properties &
kafka的相关概念
Topic
Kafka将消息分门别类,每一类的消息称之为一个主题(Topic)。对于每个topic,Kafka集群都会维护多个分区(为了使主题的消息无大小的限制和提高并发度),就像下图中所示
partition是一个有序的message序列,这些message按顺序添加到一个叫做commit log的文件中。partition中的消息都被分了一个序列号,称之为偏移量(offset),在每个partition中此偏移量都是唯一的。
Producer
发布消息的对象称之为主题生产者(Kafka topic producer)。
Consumer
订阅消息并处理发布的消息的对象称之为主题消费者(consumer),但在kafka中,真正意义上的消费者是consumer-group,consumer在consumer-group里面的作用是分摊消费。
Broker
已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个 服务器都是一个Broker。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
消息传递模式
传统的消息传递模式有两种,一种是队列模式,一种是发布—订阅模式。
在队列模式中,多个consumer从服务器中读取数据,每条消息只会到达一个consumer。
在发布—订阅模型中,消息会被广播给所有的consumer。
kafka为了结合这两种消息传递模式,提供了一种关于consumer的抽象概念:consumer group。在kafka中,真正的消费者是consumer group,consumer group里面的consumer起到了分摊消费的作用,从而使consumer group在消费消息方面实现可扩展和容灾。这并没有什么特殊的地方,仅仅是将发布—订阅模型中的运行在单个进程上的consumer替换成一个consumer group。
一个consumer group在消费时,一个partition只会分给consumer group的一个consumer消费,所以需要注意的是,一个consumer group中的consumer的数量不能比一个Topic中的partition的数量多。
Distribution(分布式)
partitions分布在kafka集群中不同的broker上,每个broker可以请求备份其他broker上partition上的数据。kafka集群支持配置partition备份的数量。针对每个partition,都有一个broker起到“leader”的作用,0个多个其他的broker作为“follwers”的作用。leader处理所有的针对这个partition的读写请求,而followers被动复制leader的结果。如果这个leader失效了,其中的一个follower将会自动的变成新的leader。
每个broker都是自己所管理的partition的leader,同时又是其他broker所管理partitions的followers,kafka通过这种方式来达到负载均衡。
总结
把上面谈到的kafka相关概念相结合,可得Topic、Producer、Consumer、Broker、消息传递模式之间的关系如图所示
kafka使用
开启kafka之后,创建一个主题(这个主题在Master和Slave1上均可以看到)
cd /usr/local/kafka
bin/kafka-topics.sh --create --zookeeper Master:2181 --replication-factor 1 --partitions 1 --topic testTopic
bin/kafka-topics.sh --list --zookeeper Master:2181
主题已创建,接下里用producer生产点数据(Master生产)
bin/kafka-console-producer.sh --broker-list Master:9092 --topic testTopic
然后再次开启新的终端或者直接按CTRL+C退出。然后使用consumer来接收数据(或者在Slave1上也可以接收)
./kafka-console-consumer.sh --bootstrap-server Master:9092 --topic testTopic --from-beginning
彻底删除topic:
1、删除kafka存储目录(server.properties文件log.dirs配置)相关topic目录
2、如果server.properties文件里配置了delete.topic.enable=true可以直接通过命令删除,否则通过命令删除只是把topic上标记为删除
3、zookeeper-client 删除掉broker下的topics里相应的topic即可。