文章目录
-
一、kafka 入门及概述
1. 定义 作用
2. Kafka基础架构
3. 安装部署
4. Kafka命令行操作 -
二、kafka 架构深入
1. Kafka工作流程及文件存储机制
2. Kafka生产者
3. Kafka消费者
4. Kafka 高效读写数据的原因
5. Zookeeper在Kafka中的作用 -
三、Kafka API
1. Producer API
2. Consumer API
3. 自定义Interceptor -
四、Flume对接Kafka的实现
-
五、Kafka监控
1. kafka manager
2. kafka monitor -
六、kafka与sparkStreaming的俩种连接方式
1. 俩连接方式的介绍
2. 直连方式实现
3. reciver方式实现
4. 俩种方式对比
正文
一、kafka 入门及概述
1. 定义: kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。消息队列作为消息中间件和java 中应用的RabbitMQ 功能是一样的。
这里的发布订阅模式如下图:个生产者多个消费者,消费者消费数据之后消息不会被清除。消息会定期处理(默认一周处理一次)
消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不
同,发布到topic的消息会被所有订阅者消费。一个组内只能消费一次, 这里发布订阅模式类似微博关注。。
-
作用: 缓冲数据、解耦合、异步处理 如果flume 没有经过kafka直接对接sparkStreaming,数据
3.Kafka基础架构
3.1 基本概念理解:
Producer :消息生产者,就是向kafka broker发消息的客户端;
Consumer :消息消费者,向kafka broker取消息的客户端;
Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区 的数据,一个分区只能由一个消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
Topic :可以理解为一个队列,生产者和消费者面向的都是一个topic;逻辑概念
Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分 为多个partition,每个partition是一个有序的队列;Replica:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,一个leader和若干个follower。
leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
follower:每个分区多个副本中的“从”,实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的follower。
3.2 kafka 基本架构 如上图有: producer --broker list (kafka cluster)–consumer group
4.Kafka安装部署
4.1 1 集群规划 版本选型 如下
4.2 jar包下载
http://kafka.apache.org/downloads.html
4.3 集群部署
1)解压安装包
[nancy@hadoop-101 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
2)修改解压后的文件名称
[nancy@hadoop-101 module]$ mv kafka_2.11-0.11.0.0/ kafka
3)在/opt/module/kafka目录下创建logs文件夹
[nancy@hadoop-101 kafka]$ mkdir logs
4)修改配置文件
[nancy@hadoop-101 kafka]$ cd config/
[nancy@hadoop-101 config]$ vi server.properties
输入以下内容:
#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径--kafka数据持久化地址
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop-101:2181,hadoop-103:2181,hadoop-102:2181
5)配置环境变量
[nancy@hadoop-101 module]$ sudo vi /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/opt/module/kafka
export PATH=$PATH:$KAFKA_HOME/bin
[nancy@hadoop-101 module]$ source /etc/profile
6)分发安装包
[nancy@hadoop-101 module]$ xsync kafka/
7)分别在hadoop-103和hadoop-102上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2
注:broker.id不得重复
8)启动集群kafka
依次在hadoop-101、hadoop-103、hadoop-102节点上启动kafka
[nancy@hadoop-101 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[nancy@hadoop-103 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
[nancy@hadoop-102 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties
9)关闭集群
[nancy@hadoop-101 kafka]$ bin/kafka-server-stop.sh stop
[nancy@hadoop-103 kafka]$ bin/kafka-server-stop.sh stop
[nancy@hadoop-102 kafka]$ bin/kafka-server-stop.sh stop
10)kafka群起脚本
for i in `cat /opt