1、kafka是啥?
kafka是一个高吞吐的分布式消息系统。
2、作用
解耦:SparkStreaming与flume之间以及hdfs与flume之间。
缓冲:数据高峰时减小hdfs和SparkStreaming压力,起缓冲作用。kafka消费速度可设置。
异步通信:
###注:
kafka最主要的作用就是用来做缓冲中间件
3、特点及优势
1、生产者和消费者的模型
2、可靠性:
kafka不丢数据,数据直接写入磁盘,而不是存在内存中
消费者不丢数据:至少一次,严格一次
3、消费者的消费速度可以设置
4、数据最后一次消费后在磁盘保存一星期,到期后数据过期
5、多副本机制,可以并行消费,提高并行消费速度
6、单节点可以连接上千客户端,消费速度可以达到百兆每秒(数据零拷贝)
7、分区数据严格有序,要是topic数据严格有序可以设置topic一个分区
4、kafka中的核心概念
broker:
Kafka集群中server节点,负责读写请求,存储消息,管理分区,无主从关系,依赖zk协调
producer:
生产者,负责生产消息,比如flume/maxwell
自己决定我那个哪分区写数据
生产模式:
轮询:(非k-v消息)
0.8:1分区先写10分钟,2分区再写10分钟。。。。
0.8之后:1分区先写1条,2分区再写1条。。。。
k的hash:(k-v消息)
对于key值进行hash,hash值对分区取模进入对应分区
consumer:
消费者,负责消费消息,比如sparkstreaming/flink
consumer group:
一个消费组可以包含一个或多个消费者,同一topic数据只能被一个消费组的其中一个消费者去消费。
topic:
消息的分类,支持一个topic多个消费者消费,一个topic由一个或多个分区组成
partition:
分区,下标从0开始,一个分区。
replication:
副本,一个分区会被复制的数量。可以并行消费,提高并行消费的速度。
offset:
偏移量,消费一个分区数据时数据所在的下标,从0开始
######注意:
一个分区被一个broker管理,一个broker管理多个分区
分区总数和消费者组中的消费者数一一对应
5、Spark + kafka版本
1、Spark 1.6 + kafka 0.8.2:
zookeeper维护offset
弊端:
每次消费都要去zookeeper中更新offset,在而zk不适用于大批量的频繁读写
2、Spark 2.3 + Kafka 0.10/0.11:
kafka维护offset
6、单节点搭建kafka
前置:安装好zookeeper
1、tar -zxvf kafka_2.11-0.11.0.3.tgz -C ../apps
2、vi /opt/apps/kafka_2.11-0.11.0.3/config/server.properties
设置一下三个参数:
broker.id=0
log.dirs=$KAFKA_HOME/kafka-logs
zookeeper.connect=Linux001:2181 #多个用逗号分隔
3、vi + /etc/profile
export KAFKA_HOME=/opt/apps/kafka_2.11-0.11.0.3
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
4、启动zookeeper:
zkServer.sh start(所有zk节点)
5、启动kafka:
kafka-server-start.sh $KAFKA_HOME/config/server.properties(所有kafka节点)
###注意:
多节点搭建scp一下,改一下broker.id即可
7、kafka常用命令
1、创建topic
kafka-topics.sh --create \
--zookeeper Linux001:2181 \ #多台zk,逗号分隔
--partitions 3 \ #分区数
--replication-factor 3 \ #每个分区副本数,不要超过kafka集群节点数
--topic t001 #topic 名字
2、列出topic列表
kafka-topics.sh --list \
---zookeeper Linux001:2181 \ #多台zk,逗号分隔
3、查看topic信息
kafka-topics.sh --describe \
--zookeeper Linux001:2181 \ #多台zk,逗号分隔
--topic t001 #不带这个参数,则列出所有topic
显示结果如下:
Topic:test PartitionCount:3 ReplicationFactor:3 Configs:
Topic: test Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2
Topic: test Partition: 1 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3
Topic: test Partition: 2 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1
结果分析:
topic名称:x 分区数量:y 副本数量:z
topic名称 分区标号 分区leader是哪个broker 副本所在节点 同步状态的副本
topic名称 分区标号 分区leader是哪个broker 副本所在节点 同步状态的副本
topic名称 分区标号 分区leader是哪个broker 副本所在节点 同步状态的副本
拿第二行做分析:
Partition: 0
Leader: 1 指的是broker.id=1 读写
Replicas: 复制该分区数据的节点列表,第一位代表leader 静态表述
Isr: in-sync Replicas 正在复制的副本节点列表 动态表述
当leader挂了,会从这个列表选举出leader
4、删除topic
kafka-topics.sh --delete \
--zookeeper Linux001:2181 \ #多台zk,逗号分隔
--topic t001
####假删除,并没有真正删除
删除zk上的topic元数据:
rmr /kafka/config/topics/t001
rmr /kafka/brokers/topics/t001
rmr /kafka/admin/delete_topics/t001
删除本地磁盘上的topic数据:
rm -rf ${KAFKA_HOME}/kafka-logs/t001
5、调整topic分区数(只能调大,不能调小)
kafka-topics.sh --alter \
--zookeeper Linux001:2181 \ #多台zk,逗号分隔
--partitions 4 --topic t001
6、创建生产者
kafka-console-producer.sh \
--broker-list Linux001:9092 \ #多台kafka,逗号分隔
--topic t001
7、创建消费者(同时可以有多个消费者)
kafka-console-consumer.sh \
--zookeeper Linux001:2181 \ #多台zk,逗号分隔
--from-beginning \ #有这个参数,则从头开始消费
--topic t001
Kafka入门第一课:kafka的简单介绍
最新推荐文章于 2024-07-04 23:05:10 发布