首页 > 其他分享 >Kafka--分布式MQ系统、日志系统

Kafka--分布式MQ系统、日志系统

时间:2024-08-19 15:49:35浏览次数:8  
标签:-- 分区 kafka 查找 MQ 消息 offset Kafka segment

简介:Kafka是由Linkedin(领英)开发的一个分布式、分区多副本、多订阅者、基于Zookeeper协调的分布式日志/MQ系统,于2010年贡献给Apache基金会并成为顶级开源项目。

Kafka的特性
# 1、高吞吐、低延迟
  kafka最大的特点就是收发消息非常快,kafka每秒可以处理百万级别的消息,最低延迟只有几毫秒
# 2、高伸缩性
  每个主题(topic)包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中
# 3、持久性、可靠性
  kafka能够允许数据的持久化存储,消息被持久化到磁盘,并且支持数据备份防止丢失,kafka底层的数据存储是基于Zookeeper存储的(Zookeeper的数据能够持久存储)
# 4、容错性
  允许集群中的节点失败,某个节点宕机,kafka集群能够正常工作
# 5、高并发
  支持数千个客户端同时读写
高吞吐

1、顺序写磁盘
2、零复制技术(使用零拷贝原理来快速移动数据,避免了内核之间的切换)
3、消息压缩
4、分批发送

数据可靠性的保证

ACK应答机制+副本同步机制+ISR

消息传递模式主要有两种:点对点传递模式、发布-订阅模式
kafka在生产者是push消息、而消费者是pull消息

kafka基础框架


Producer:生产者,消息的入口
Broker:kafka实例
Topic:消息的主题
Partition:Topic的分区(分区的作用是做负载,提高kafka的吞吐量,同一个topic在不同分区的数据是不重复的,partition表现形式是一个一个的文件夹)
Replication:每个分区都有多个副本,副本的作用是做备胎,当主分区(Leader)故障的时候就会选择一个备胎(Follower)上位成为Leader,默认副本最大数量是10个,且不能大于Broker数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)
Message:消息主体
Consumer:消费者,消息的出口
Zookeeper:kafka集群依赖zookeeper来保存集群的元信息,来保证系统的可用性

工作流程
(1)发送数据

Producer在写入数据的时候永远的找leader,不会直接将数据写入follower!

重要:producer采用push模式将数据发布到broker,每条消息追加到分区中,顺序写入磁盘,所以保证同一分区内的数据是有序的!
重要:producer向kafka写入消息是通过ACK应答机制来保证消息不丢失的(级别0 1 all)
重要:partition分为多组segment,每个segment中又包含.log、.index、。timeindex文件,存放的每条message中包含offset、消息大小、消息体


假如现在需要查找一个offset为368801的message是什么样的过程呢?
1、先找到offset的368801message所在的segment文件(利用二分法查找),这里找到的就是在第二个segment文件。
2、打开找到的segment中的.index文件(也就是368796.index文件,该文件起始偏移量为368796+1,我们要查找的offset为368801的message在该index内的偏移量为368796+5=368801,所以这里要查找的相对offset为5)。由于该文件采用的是稀疏索引的方式存储着相对offset及对应message物理偏移量的关系,所以直接找相对offset为5的索引找不到,这里同样利用二分法查找相对offset小于或者等于指定的相对offset的索引条目中最大的那个相对offset,所以找到的是相对offset为4的这个索引。
3、根据找到的相对offset为4的索引确定message存储的物理偏移位置为256。打开数据文件,从位置为256的那个地方开始顺序扫描直到找到offset为368801的那条Message。

这套机制是建立在offset为有序的基础上,利用segment+有序offset+稀疏索引+二分查找+顺序查找等多种手段来高效的查找数据!至此,消费者就能拿到需要处理的数据进行处理了。

(2)消费数据

读取数据的时候也是找leader去拉取,同一个消费组者的消费者可以消费同一topic下不同分区的数据,但是不会组内多个消费者消费同一分区的数据,所以消费者多于partition是提效不了的,实际开发中,一般建议消费组的consumer和partition数量一致

重要 如何保证消息消费有序——>指定分区和用单一消费者消费分区保证顺序

一些项目中使用kafka的小坑:

Kafka包中的消费者的自动提交不能单独使用,enable-auto-commit单独使用是无效的,即单独配置,无论配置成true/false最终都会自动提交offset。
(1)enable-auto-commit是为手动提交设置的;
(2)Ack手动提交,配置消费者enable-auto-commit: false和手动提交ack-mode: manual,此时,在消费者中手动ack。

标签:--,分区,kafka,查找,MQ,消息,offset,Kafka,segment
From: https://www.cnblogs.com/kris-cbl/p/18363418

相关文章

  • CADMATIC许可证配置文件
    在数字化时代,CADMATIC软件已成为工程设计和制造业领域的核心工具。为了充分发挥CADMATIC软件的性能并确保合规性,合理的许可证配置文件设置至关重要。本文将为您揭示CADMATIC许可证配置文件的奥秘,帮助您优化软件性能并确保合规性,提升企业的竞争力。一、CADMATIC许可证配置文件的重......
  • 测试环境治理之MYSQL索引优化篇
    1治理背景测试环境这个话题对于开发和测试同学一定不陌生,大家几乎每天都会接触。但是说到对测试环境的印象,却鲜有好评:•环境不稳定,测试五分钟,排查两小时•基础建设不全,导致验证不充分,遗漏缺陷•多人共用,节点堵塞这些问题在行业内其实屡见不鲜,针对测试环境的治理,不得不引起......
  • Django 关系字段类型
    关系型数据库的关系包括三种类型:ForeignKey:一对多,将字段定义在多的一端中。#一个多对一的关系。需要两个位置参数:模型相关的类和on_delete选项。goods=models.ForeignKey('Goods',on_delete=models.CASCADE)ManyToManyField:多对多,将字段定义在任意一端中。use......
  • AI大模型快速生成题库-助力业务人效提升10+倍
    一现状·问题1、培训考核涉及的文件数量较多当前,京东航空公司维修部门面临着人员规模的快速增长和持续的培训需求。根据民航局的规定,维修培训必须确保所有维修人员都能够完成对飞机维修相关文件的学习,这包括维修方案、维修工程管理手册、工作程序手册等共计12本手册以及民航局......
  • 电商搜索革命:大模型如何重塑购物体验?
      随着电商行业的蓬勃发展,搜索技术作为连接用户与商品的桥梁,其重要性日益凸显。在技术不断革新的今天,电商搜索技术经历了哪些阶段?面对大模型的飞速发展,企业又将如何把握趋势,应对挑战?为了深入探讨这些问题,我和InfoQ栏目探讨了电商搜索技术的发展历程、当前的应用状况以及面临......
  • HBase学习的第六天--Hbase之过滤器
    Hbase之过滤器HBase的基本API,包括增、删、改、查等。增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。过滤器可......
  • P5443
    感觉有点神秘诶,第一次做操作分块。和cdq要解决的问题挺像的,但处理修改对询问的贡献时无法只与子问题的规模有关,只能把修改变成整块的和散块的,暴力回滚。算法流程大概是:对所有操作分块,在每块内:进入该块时保留前面修改的影响按照其它喜欢的方式重新排序如果这是一个询问,暴......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
       农村高中是位于乡镇地区的普通全日制高级中学,从区域发展来看,随着城市化进程的加快,学校生源逐年下降,农村高中学生的数学素养特别是解决问题的模型素养日益下降。本课题研究中的农村高中是指位一所位于农村的普通四星级高级中学。数学建模能力从量和型的侧面去考查实际问......
  • 【YashanDB知识库】生成迁移报告失败,"报错未知类型错误异常:"
    【标题】YMP迁移【问题分类】迁移报告【关键字】迁移报告、未知类型错误异常【问题描述】下载迁移报告时报错“未知类型错误异常:”,一长串英文日志报错:【问题原因分析】java版本不对,ymp仅支持java8和11版本,用户环境用的21版本。【解决/规避方法】将java版本更新为8或者1......
  • Visual Studio 2013 自定义动态库dll文件lib存放路径
    前言全局说明VisualStudio2013自定义lib存放路径一、说明环境:Windows7旗舰版VisualStudio2013二、设置说明在一个功能比较全的项目中,有可能会引入第三方库来完成某些功能,为了让目录结构、文件,清晰,会将引入的dll文件,放置到一个独立目录里。这样方便管理,也便......