kafka基础:
(1)kafaka与其他的消息系统一样,发送的也是序列化的对象,比如String,和经过序列化处理的对象
(2)消息类型:
Queue:队列, 点对点的消息类型
topic:主题,群发消息
(3)消息系统:
同步消息:得有返回值才能继续往下执行
异步消息:不需要等待返回值就可以继续往下执行
对于kafka创建同步消息还是异步消息其实很简单,就是创建发送消息的时候有没有返回Future对象,如果有Future对象,那么就是同步消息,如果没有就是异步消息。当然异步消息也可以添加回调函数,等待返回值。
kafka的体系架构和概念:
(1)生产者:用来发送消息的
(2)消费者:用来接收消息的
(3)消费者组:在kafka中有个消费者组的概念,消费者必须在一个消费组里才能接收消息。
(4)topic,主题是有分区partition,topic是一个逻辑概念,不是真正存在的,真正存在的是分区,分区又有段文件segment组成,以.log文件形式存在,每个.log文件最大保存1G的数据,当有新数据的时候再产生新的.log文件。
a、如果在发消息的时候指定了分区,则消息投递到指定的分区
b、如果没有指定分区,但是消息的key不为空,则基于key的哈希值来选择一个分区
c、如果既没有指定分区,且消息的key也是空,则用轮询的方式选择一个分区
注意:一个分区里的消息只会发送给一个分组里边的消费者
(5)broker ,负责发送消息的服务
部署kafka:
一个配置文件server.properties对应一个broker,一个broker启动的时候对应一个配置文件
(1)单机单broker
解压文件:tar -zxvf kafka_2.11-2.4.0.tgz -C ~/training/
创建端文件存放位置:
cd ~/training/kafka_2.11-2.4.0
mkdir logs
mkdir broker0
配置配置文件:
cp server.properties server0.properties
因为是第一台机器,我们只需配置一个zookeeper位置和段文件存放位置即可,多broker的话必须保证,每个broker的id是不一样的
vim server0.properties
zookeeper.connect=bigdata111:2181
dir.logs=/root/training/kafka_2.11-2.4.0/logs/broker0
启动broker:
bin/kafka-server-start.sh config/server0.properties &
(2)单机多broker
在第一台的基础上我们再多增加一个配置文件
cp server.properties server1.properties
修改文件的id,端口和zookeeper的地址
vim server1.properties
broker.id=1
zookeeper.connect=bigdata111:2181
dir.logs=/root/training/kafka_2.11-2.4.0/logs/broker1
启动broker0和broker1:
bin/kafka-server-start.sh config/server0.properties &
bin/kafka-server-start.sh config/server1.properties &
(3)多机多broker
多机多broker和单机多broker差不多,多机多broker主要还是利用zookeeper进行容错的
bigdata111
zookeeper1
broker0
broker1
bigdata112
zookeeper2
broker2
broker3
bigdata113
zookeeper3
broker4
broker5
因为之前我们搭建过zookeeper的分布式,这里我们只关注kafka的搭建
所有的broker的配置文件都差不多,只不过是对应的id、端口、日志文件路径不一样
broker.id=0
#这个可以配置也可以不配置,
port=9092
log.dirs=/root/training/kafka_2.11-2.4.0/logs/broker0
zookeeper.connect=bigdata111:2181,bigdata112:21818,bigdata113:2181
broker1修改配置,修改完
scp -r root@bigdata112:/root/training/kafka_2.11-2.4.0/ root@bigdata113:/root/training/
scp -r root@bigdata112:/root/training/kafka_2.11-2.4.0/ root@bigdata114:/root/training/
然后登陆到bigdata113和bigdata114修改对应的配置文件和日志所在文件夹
然后把zookeeper启动完,再挨个启动broker就可以了
使用客户端测试生产者、消费者
创建主题:
创建Topic:指定分区数、replicas等等
bin/kafka-topics.sh --create
–zookeeper bigdata111:2181 \ 指定ZooKeeper的地址
–replication-factor 2 \ 副本数,一般跟broker的个数一致,不超过3
–partitions 3 \ 分区的个数,默认是1个分区
–topic mytopic1 topic的名字
bin/kafka-topics.sh --zookeeper bigdata111:2181 --list 查看所有的topic列表
bin/kafka-topics.sh --zookeeper bigdata111:2181 --describe --topic mytopic1 查看topic的详细信息
发送消息:
bin/kafka-console-producer.sh --broker-list bigdata111:9092,bigdata111:9093 --topic mytopic1
接收消息:
bin/kafka-console-consumer.sh --bootstrap-server bigdata111:9092,bigdata111:9093 --topic mytopic1
从开始位置消费
bin/kafka-console-consumer.sh --bootstrap-server bigdata111:9092 --from-beginning --topic mytopic1
显示key消费
bin/kafka-console-consumer.sh --bootstrap-server bigdata111:9092 --property print.key=true --topic mytopic1