欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

消息队列-Kafka

时间:2023-05-01

常见的消息队列,有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、metaMq等,部分数据库缓存中间件如Redis也可实现消息队列的功能。

我对kafka的了解比较多一点,我们来了解一下kafka的机制和原理;

Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 linkedIn 公司开发,使用 Scala 语言编写,目前是 Apache 的开源项目.它的实现底层是基于zookeeper的,zk上保存着集群的broker,topic,partion这些数据,还负责broker的故障发现,partition leader 选举,负载均衡等功能 先上一张图: 这张图可以清楚的表示出各个组成部分:消息的生产者,消费者,broker,topic,partion和zk的作用; broker:可以理解为部署了KAFKA的服务器,负责消息的存储和转发; topic:主要用于区分消息的类别,对消息进行分类,消费者通过监听指定的topic来获取消息; partion:一个topic包含了多个partion,partion保证了消息的有序性; offset:偏移量,代表消息在日志中的位置; producer:生产者,往中间件发送消息; consumer:消费者,消费消息; consumerGroup:消费者组,消费者的分组,每个consumer都属于一个消费者组,topic的数据会广播给不同的group;同一个group中的消费者只有一个能拿到这个数据; segment: partition 物理上由多个 segment 文件组成,每个 segment 大小相等,顺序读写。每个 segment 数据文件以该段中最小的 offset 命名,文件扩展名为.log。这样在查找指定 offset 的 Message 的 时候,用二分查找就可以定位到该 Message 在哪个 segment 数据文件中。 kafka常见问题与解决策略: 1.ISR: 全称是In-Sync Replicas 副本同步队列,它是由leader维护的,follower从leader同步数据有一些延迟,每个Partition都会有一个ISR,而且是由leader动态维护 ,如果一个follower比一个leader落后太多,则Leader会将其从ISR去除; 2.消息丢失的原因和解决方案: kafka确认接收消息的方式有三种:acks:0( 不进行消息接收是否成功的确认),1( 当Leader接收成功才确认),-1( 当Leader和 follower都 接收成功后确认);消息丢失的主要原因有两个:一个是我们设置的接受模式为acks=0时,网络波动导致消息没有发送到服务器上;而是acks=1时,leader接收到消息后挂掉了但是消息还没有同步到其他broker上;当acks=-1时,不存在消息丢失;


Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。