消息队列-Kafka

常见的消息队列,有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时,不存在消息丢失;



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值