做ae好的网站有哪些,合肥微信网站制作,公司网站内容的更新,wordpress 4.7解析工作中的消息队列用的是Kafka#xff0c;一直没有系统的了解#xff0c;这边集中整理一下。
目录
Kafka主要组件有十个部分。
1.Broker#xff08;服务器#xff09;
2.Record#xff08;消息#xff09;
3.Producer#xff08;生产者#xff09;
4.Consumer一直没有系统的了解这边集中整理一下。
目录
Kafka主要组件有十个部分。
1.Broker服务器
2.Record消息
3.Producer生产者
4.Consumer消费者
5.Topic主题
6.Partition分区
7.Replica(副本机制)和分区结合起来是Kafka实现高可用和负载均衡的原理
8.Segment(段)
9.Consumer Group(消费者组)
10.Consumer Offset(偏移量)Kafka,单分区消息顺序消费的原因
Kafka的整体架构
Kafka特性
1磁盘顺序I/O速度不亚于内存I/O
2索引
3批量处理和压缩传递海量吞吐的基础
4零拷贝 Kafka作为消息队列当然它不仅仅只有消息队列这一个应用场景。
Kafka主要组件有十个部分。
1.Broker服务器
a)Broker就是Kafka的服务器用于存储和管理消息默认是9092端口
b)生产者和Broker建立连接将消息发送到服务器上存储起来
c)消费者跟Broker建立连接订阅和消费服务器上存储的消息。
2.Record消息
a)客户端传输的数据叫做消息,在Kafka中也叫Record.
b)Record在客户端是一个KV键值对ProducerRecord, ConsumerRecord
c)Record在服务端是一个KV键值对RecordBatch(批量发送) 或 Record.
3.Producer生产者
发送消息的一方称为生产者
Kafka为了提升消息发送速率生产者默认采用批量发送的方式发送消息至Broker,
一条发送多少条由参数batch.size决定默认16K 4.Consumer消费者
a订阅接收消息的一方叫消费者
b)消费者获取消息有两种模式Pull模式拉消费者主动从消息队列中获取消息Push模式推Broker把消息推送给消费者
Kafka采用的是Pull模式因为Kafka是支持大数据的如果采用Push模式的话海量数据可能把下游消费端给打爆所以Kafka采用Pull模式推送消息
c)Pull模式消费者可以控制一次到底获取多少条消息max.pull.records 默认是500
5.Topic主题 a)topic(主题)一个逻辑概念可以理解为一组消息的集合
b)生产者和消费者通过topic进行消息的写入和读取
c)生产者发送消息时候若topic不存在是否自动创建auto.create.topics.enable(建议关闭)
6.Partition分区 a)分区Partition就是把一个topic分成几个不同的部分
b)一个topic在创建时候可以划分多个分区若没有指定默认分区数为1可通过参数修改num.partitions
c)Kafka中修改分区规则可加不可减
7.Replica(副本机制)和分区结合起来是Kafka实现高可用和负载均衡的原理 a)Replica(副本)是Partition(分区)的副本每个分区可以有若干个副本但是不能超过集群数量
b)副本必须在不同的Broker上副本包括了主从节点Leader(图片中蓝色部分)Foller(图片中灰色部分)
c)服务端可以通过参数控制默认副本数offsets.topic.repilication.factor(一般不这样用一般直接通过命令设置副本数)
生产者只会往leader节点发送消息消费者也只会从leader节点读取消息Kafka通过将各消息的leader节点放在不同的Broker也就是服务器上实现了负载均衡然后个分区follower节点实现了高可用
8.Segment(段) Kafka的数据文件是写在.log文件里面的另外一起还对生成对应的索引.index文件和对应的时间.timeIndex文件。
但是很容易的可以理解如果一直往一个log文件里面追加数据那么长时间使用之后log文件的的查找会随着数据量变大而变慢所以在这种情况下就引入了Segement段的概念。
a)Segement(端)的目的是建一个分区的数据划分、存储到不同的文件中
b)每个Segment至少由一个数据文件和2个索引文件构成3个文件是成套出现的。
c)引入段的意义
加快查询效率
删除数据时减少逐条IO
d)Segement大小控制
按时间周期生成 log.roll.hours默认一周
按文件大小生产 log.segment.bytes默认1G
9.Consumer Group(消费者组)
由于生产者可能短时间内生产大量消息为了提升消息的消费速率就增加了消费者组的概念group id
a使用消费者组提升消费效率和吞吐量
b) 同一个Group中的消费者不能消费相同的分区group id相同在一个组内
10.Consumer Offset(偏移量)Kafka,单分区消息顺序消费的原因 Kakfa在单分区里面的消息是顺序存储的。
a)Offset(偏移量)的目的在于记录消费者的消费位置
b)Kafka现行版本将Offset保存在服务器__consumer_offsets_主题中0.9版本以前是在zooKeeper中 Kafka的整体架构 上图所示
集群中有三个Broker,有两个topic,都有三个副本topic0有两个分区分区1图中左上角的Partition(0)的leader在Broker0中分区2leader在Broker1中topic1的分区leader在broker2中。
生产者往leader分区蓝色部分发送消息时候leader节点会向follower节点同步备份消息绿色线条部分。然后每个消费者组对消息进行消费红色箭头部分想通消费者组的消费者不能消费同一个分区的消息 Kafka特性
1磁盘顺序I/O速度不亚于内存I/O
Kafka采用的是磁盘顺序I/O
磁盘顺序I/O相对于随机I/O不同点在于
随机I/O数据存储在磁盘的位置是分散的所以需要多次磁盘寻址来读取和写入数据。
但是顺序I/O只需要一次磁盘寻址。去除了重复寻址的过程。Kafka的记录是不断追加到本地磁盘的末尾的所以是顺序I/O。
2索引
Kafka在Broker端提供了offset索引和timeIndex(时间戳)索引两种索引采用了稀疏索引的方案
3批量处理和压缩传递海量吞吐的基础
在收发消息的时候批量处理。
压缩算法进行压缩后传递gzip等
4零拷贝 传统的I/O拷贝如上图
数据文件从磁盘到网卡会经过四次从用户态到内核态切换。比较耗时
但是Kafka采用的是linux中的sendfile()函数采用的是零拷贝的技术使得读写有比较高的提升
对应的java源码中使用的是transferTo函数 以上就是Kafka整体架构主要组件和对应的特性。后续还会记录几个主要组件的原理帮助理解。