Kafka学习笔记
一、简介
分布式流处理平台。
在系统之间构建实时数据流管道。
以topic分类对记录进行存储。
每个记录包含key-value+timestamp
每秒钟百万消息吞吐量。
组成:
Code
producer //消息生产者 |
二、安装
这里我们规划s202-s203-s204作为Kafka集群。
下载 kafka_2.12-2.4.1.tgz 并上传到s202
tar、创建连接
Code$tar -zxvf kafka_2.12-2.4.1.tgz -C /soft/
$ln -s kafka_2.12-2.4.1 kafka配置环境变量
Code[/etc/profile]
# Kafka
export KAFKA_HOME=/soft/kafka
export PATH=$PATH:$KAFKA_HOME/bin
$source /etc/profile配置文件
Code# 拷贝一份初始配置文件
$cp server.properties server.properties.bak修改server.properties内容:
properties# 设置ID,保证集群中唯一(这里取IP)
202 =
# 打开注释
listeners=PLAINTEXT://:9092
# 修改日志目录
/home/wbw/kafka/logs =
# 修改zookeeper集群
s201:2181,s202:2181,s203:2181 =分发到s203,s204。注意修改broker.id
Code$scp -r kafka_2.12-2.4.1 wbw@s203:/soft/
$scp -r kafka_2.12-2.4.1 wbw@s204:/soft/
三、快速使用
3.1 启动Kafka服务器
确保ZK集群开启
启动Kafka,在S202~S204分别运行
Codebin/kafka-server-start.sh -daemon config/server.properties
-daemon :以守护线程方式启动
3.2 创建主题
Code
[wbw@s202 /soft/kafka]$bin/kafka-topics.sh --create --zookeeper s201:2181,s202:2181,s203:2181 --replication-factor 2 --partitions 2 --topic test |
–create:创建主题
–bootstrap-server:引导服务
–replication-factor:副本数
–partitions:分区数
–topic:主题名
3.3 查看主题列表、描述
列表
Code
[wbw@s202 /soft/kafka]$bin/kafka-topics.sh --list --zookeeper s202:2181 |
描述
Code
[wbw@s202 /soft/kafka]$bin/kafka-topics.sh --describe --zookeeper s202:2181 --topic test |
注:该主题有2个分区,每个分区有2个副本。其中副本,又有leader和follow之分。一个消息过来,会被分配到一个分区中,所有副本上拥有该分区的主机都会复制一份。具体过程再副本中讲到。
3.4 启动控制台生产者
启动后,发送一些消息。
Code
[wbw@s202 /soft/kafka]$bin/kafka-console-producer.sh --broker-list s202:9092 --topic test |
3.5 启动控制台消费者
接受来自生产者的消息。
Code
[wbw@s203 /soft/kafka_2.12-2.4.1]$bin/kafka-console-consumer.sh --bootstrap-server s202:9092 --topic test --from-beginning |
3.6 删除主题
Code
$kafka-topics.sh --delete --zookeeper s203:2181 --topic test |
四、副本模式
broker存放消息以消息达到顺序存放。生产和消费都是副本感知的。
支持到n-1故障。每个分区都有leader,follow.
leader挂掉时,消息分区写入到本地log或者,向生产者发送消息确认回执之前,生产者向新的leader发送消息。
新leader的选举是通过isr进行,第一个注册的follower成为leader。
4.1 同步复制
- 生产者producer先联系zk找到leader
- 向leader发送消息
- leader收到消息后写入到本地log中
- 然后follower向leader,pull消息
- follower拿到消息后写入本地log
- 然后向leader发送ACK消息
- leader收到所有ACK消息后向producer回传ACK
4.2 异步复制
和同步复制的区别在于leader写入到本地log后,直接向client回传ACK消息,不需要等待所有follower复制完成,可能造成消息丢失。
五、JAVA API
5.1 添加依赖
xml
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka --> |
5.2 生产者
java
/** |
5.3 消费者
java
/** |