初识Kafka
-
Kafka核心功能?
高性能的消息发送和消费 -
Kafka使用步骤
1.下载Kafka二进制压缩包: Scala 2.12 - kafka_2.12-2.5.0.tgz Kafka官网下载地址其中2.12表示Scala版本号,2.50表示Kafka版本号2.解压Kafka压缩包: tar -zvxf kafka_2.12-2.5.0.tgz
3.启动Zookeeper服务器: Zookeeper是为Kafka提供协调服务的工具,bin/zookeeper-server-start.sh config/zookeeper.properties
4.启动Kafka服务器: bin/kafka-server-start.sh config/server.properties
5.创建1个分区和1个副本的topic: bin/kafka-topic.sh --create --zookeeper localhost:2181
–topic test --partitions 1 --replication-factor 16.查看topic状态: bin/kafka-topic.sh --describe --zookeeper localhost:2181 --topic test
7.发送消息: bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
8.消费消息:bin/kafka-console-consumer.sh --bootsrap-server localhost:9092 --topic test
–from-beginning
Kafka功能
- 核心架构
1.生产者发送消息给Kafka服务器
2.消费者从Kafka服务器读取数据
3.Kafka服务器依托Zookeeper集群进行服务的协调管理 - Kafka消息引擎系统: 在不同系统间传递消息,实现了生成者和消费者松耦合的异步式数据传递
- 消息设计:考虑语义清晰和格式上的通用性,一般都采用结构化的方式进行设计,Kafka消息是采用二进制方式进行保存的
- 消息引擎范型
1.消息队列模型:一种点对点的消息传递方式.消息由一个发送者生产,只被一个消费者处理,一旦消息被消费,就会从队列中移除该消息
2.发布/订阅模型:发布者将消息生产出来发送到指定的topic中,所有订阅了该topic的消费者都可以接收该topic下的所有消息
Kafka优势
-
高吞吐量低延迟
吞吐量:每秒能够处理的消息数
延时:客户端发起请求与服务器处理请求并发送响应给客户端之间的时间段Kafka写操作快: 每次写入操作都是把数据写入到OS的缓存页(page cache)中,OS自行决定什么时候把页缓存中的数据持久化到磁盘上
1.操作系统页缓存是在内存中分配的,所以消息写入速度快
2.Kafka不必直接与底层文件系统打交道,避免了繁琐的IO操作,当Kafka服务器宕机后,页缓存中的数据依然存在
3.Kafka写入操作采用append方式,避免磁盘随机写操作Kafka消费消息速度快:
1.Kafka在读取消息时首先尝试从OS的页缓存中读取,如果命中,便把消息从页缓存直接发送到网络的socket上
2.采用零拷贝技术加强网络间数据传递效率 -
消息持久化
消息持久化的优点:
1.解耦消息发送和消息消费
2.可以实现消息重演 -
负载均衡和故障迁移
1.负载均衡:让系统的负载根据一定的规律均匀的分配到不同的服务器上,最大限度的提升系统整体的运行效率
2.故障迁移:当某台服务器意外终止时,集群能检测到该失效,并迅速将失效服务器上的服务迁移到正常的服务器上.通常以会话或心跳的机制实现故障迁移
3.Kafka的故障迁移以会话的形式实现.Kafka启动后,会以会话的形式注册到Zookeeper.如果Kafka宕机,会话就会超时失效,集群会将此服务器上的应用迁移到别的服务器上 -
伸缩性
1.伸缩性:向分布式系统中增加额外的计算机资源时吞吐量提升的能力.
每台Kafka服务器上的状态统一交给Zookeeper集群保管.扩展Kafka集群只需要启动新的Kafka服务器即可
Kafka概念介绍
-
消息
| CRC | 版本号 | 属性 | 时间戳 | key长度 | key值 | value长度 | value值|
1.Key:消息键,消息分区时决定消息保存在topic小的哪个partition
2.Value:消息体,保存实际的消息数据
3.TimeStamp:消息发送时间戳 -
topic
1.topic是一个逻辑概念,代表了一类消息
2.Kafka消息3级结构:topic-partition-message -
partition
1.一个topic由若干个partition组成,partition是有序的消息队列,每个partition有自己的编号,从0开始,partition上的每条消息都被分配一个唯一的序列号,被称为offset,从0开始顺序递增,只能对topic上的每个partition做append操作.引入partition是为了提高系统的吞吐量 -
offset
1.位移值,每条消息的offset在partition上的位置是固定的,但随着消费该partition的消费者的位移会不断前移
2.Kafka的每一条消息可以通过<topic,partition,offset>唯一确定 -
replica
1.副本:分布式系统要实现可靠性,主要是通过冗余机制.副本就是为了防止数据的丢失
2.副本的分类:leader replica和follower replica.leader和follower分布于不同的服务器.前者提供服务,后者被动的从leader replica同步数据,如果leader replica宕机,会从follower replica中挑选出新的leader继续提供服务 -
ISR
ISR:in-sync replica:与leader replica保持同步的replica集合.该集合中的所有replica保存的消息日志都与leader replica保持同步状态.只有该集合中的replica能被选为leader.该集合中所有replica都接收到消息,才设置此消息为已提交状态.ISR集群会自动维护与leader replica保持一致的replica.
Kafka的使用场景
- 消息传输
- 日志收集
- 流式处理