kafka简介
kafka是一个开源的分布式事件流平台 Event Streaming Platform,主要用于数据管道,流分析,数据集成和关键任务应用.
事件的发布订阅流式模型,数据可以从其他系统导入或者导出
可靠的流式数据存储能力
可回溯的事件处理能力
- kafka将topic分成若干个partition来增加吞吐量
- 配合分区的设计,引出消费者组consumer group概念,组内消费者并行消费
- 提高可用性每个partition可以添加若干个副本,分布在不同的broker中
- kafka可以基于ZK来管理kafka集群,ZK记录leader,2.8x之后kafka也可以不使用ZK
核心概念
- Producer: 生产者 向broker发送消息客户端
- Consumer: 消费者 从broker中获取消息的客户端
- Consumer Group (CG): 由多个消费者构成,消费者组中每个消费者负责不同分区partition中的数据,一个分区partition只能由一个组内消费者消费,消费者组之间互不影响.所有消费者都属于某一个消费者组,消费者组是一种逻辑上的订阅者
- Broker: 一个kafka的服务器为一个broker,每一个broker存在多个分区partition,可以存储多个topic
- Topic: 主题 类似与一个队列,每个Producer和Consumer都是面向一个topic
- Partition: 分区 一个大的topic可以分割成不同的partition从而分布在不同的broker上,并且partition可以存在冗余副本提高了系统的吞吐量和高可用性,每一个partition是一个有序的队列
- Replica: 副本 一个Topic中的每一个分区partition存在若干个副本存放在不同的broker中,存在一个Leader和若干个Follower
- Leader: 主副本,producer和consumer生成或者消费数据都是从leader从获取
- Follower: 从副本,实时从Leader主副本中同步数据,Leader发生故障时,Follower会重新竞选出新的一个Leader
kafka的安装
- 下载安装包 https://irrors.tuna.tsinghua.edu.cn/apache/kafka/
- 上传到Linux服务器上并解压 tar -zxvf kafka_2.12-3.2.0 -C /usr/local/kafka
- 修改配置文件 cd ./config 修改 server.properties
#broker 的全局唯一编号,不能重复,只能是数字。 broker.id=0 #处理网络请求的线程数量 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/datas #topic 在当前 broker 上的分区个数 num.partitions=1 #用来恢复和清理 data 下数据的线程数量 num.recovery.threads.per.data.dir=1 # 每个 topic 创建时的副本数,默认时 1 个副本 offsets.topic.replication.factor=1 #segment 文件保留的最长时间,超时将被删除 log.retention.hours=168 #每个 segment 文件的大小,默认最大 1G log.segment.bytes=1073741824 # 检查过期数据的时间,默认 5 分钟检查一次是否数据过期 log.retention.check.interval.ms=300000 #配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理) zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/kafka
- 启动 zk
- 启动kafka
bin/kafka-server-start.sh -daemon config/server.properties
- 验证kafka正确性
# 创建一个topic bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092 # 创建一个producer bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092 # 创建一个consumer bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
命令行操作相关参数介绍
kafka-topics.sh 相关参数
kafka-console-producer.sh
kafka-console-consumer.sh