赞
踩
因为在高并发环境下,同步请求来不及处理,请求往往发生阻塞。例如:大量请求访问数据库,最后还会导致线程过多,容易引发雪崩。
我们使用消息队列,通过异步处理请求缓解系统的压力。消息队列应用于异步处理,流量削峰,应用解耦,消息通讯等场景
比较常见的MQ中间件有ActiveMQ(基本淘汰)、HabbitMQ(主流)、RocketMQ(主流)、kafka等
kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域,它支持分区的,多副本的,基于zookeeper协调的分布式消息中间系统。
一台kafka服务器就是一个broker,一个由多个broker组成,一个broker可以容纳多个topic
类似于数据库中的表或者ES的index(索引),生产者消费者都面相一个topic,物理上不同topic的消息分开存储
一个topic可以分割成多个partition,每个partition都是有序的,kafka只保证partition里的数据是有序,不保证partition的顺序
每个partition中的数据使用多个segment文件存储
方便在急群众扩展,每个partition调整来适应它的机器,一个topic可以由多个partition组成,因此集群可以适应任意大小的数据
可以调高并发
replica——副本
leader——只负责数据的读写
follower——只负责数据的备份
producer——数据的发布者
Consumer——消费者
Consumer Group(GC)——消费者组
offset偏移量:默认生命周期为1周(7*24小时)
zookeeper:kafka通过zookeeper来存储集群的meta信息。作用:生产者push数据到kafka集群,就必须要找到kafka集群的节点在哪,这些都是通过zookeeper寻找的。消费者消费哪一条数据也需要zookeeper的支持,zookeeper获取offset,offset记录上一次数据消费到哪,这样可以接着上一条数据进行消费
注意:同一组内不能消费同一组的partition
Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,且都是面向 topic 的
为了防止生产者不断生产消息追加到log中而导致数据定位效率低下。Kafka采取了分片和索引机制,将每个partition分为多个segment。每个segment对应两个文件:“.index” 文件和 “.log” 文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。
index 和 log 文件以当前 segment 的第一条消息的 offset 命名。
.index——文件存储大量的索引信息
.log——文件存储大量的数据
索引文件中的元数据——对应数据文件中message的物理偏移地址
为保证producer发送的数据,能可靠的发送到指定的 topic,topic的每个partition收到 producer 发送的数据后, 都需要向producer发送 ack(acknowledgement 确认收到),如果producer收到 ack,就会进行下一轮的发送,否则重新发送数据
follower发生故障后会被临时踢出ISR(Leader 维护的一个和Leader保持同步的Follower集合),待该follower 恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向 leader 进行同步。等该follower的LEO 大于等于该 Partition的HW,即follower追上leader之后,就可以重新加入ISR了
leader发生故障之后,会从ISR中选出一个新的leader之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的 log 文件高于HW的部分截掉,然后从新的leader同步数据
producer向leader发送数据时,可以通过 request.required.acks 参数来设置数据可靠性的级别:
级别 | 功能 | 优点 | 缺点 | 注意事项 |
---|---|---|---|---|
0 | producer无需等待来自broker的确认而继续发送下一批消息 | 传输效率高 | 可靠性低 | borker故障时可能会造成数据丢失 |
1 | producer在ISR中的leader已成功收到的数据并得到确认后发送下一条message | 传输率较高 | 可靠性较低 | follower同步成功之前leader故障,那么将会丢失数据 |
-1 | producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成 | 传输效率低 | 可靠性高 | follower 同步完成后,broker 发送ack 之前,leader 发生故障,那么会造成数据重复 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。