目录

  • Kafka的基本介绍
  • Kafka的设计原理分析
  • Kafka数据传输的事务特点
  • Kafka消息存储格式
  • 副本(replication)策略
  • Kafka消息分组,消息消费原理
  • Kafak顺序写入与数据读取
  • 消费者(读取数据)

Kafka的基本介绍

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。

Kafka的设计原理分析

一个典型的kafka集群中包含若干producer,若干broker,若干consumer,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

Kafka专用术语:

  • Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
  • Topic:一类消息,Kafka集群能够同时负责多个topic的分发。
  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • Segment:partition物理上由多个segment组成。
  • offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息。
  • Producer:负责发布消息到Kafka broker。
  • Consumer:消息消费者,向Kafka broker读取消息的客户端。
  • Consumer Group:每个Consumer属于一个特定的Consumer Group。

Kafka数据传输的事务特点

  • at most once:最多一次,这个和JMS中"非持久化"消息类似,发送一次,无论成败,将不会重发。消费者fetch消息,然后保存offset,然后处理消息;当client保存offset之后,但是在消息处理过程中出现了异常,导致部分消息未能继续处理。那么此后"未处理"的消息将不能被fetch到,这就是"at most once"。
  • at least once:消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功。消费者fetch消息,然后处理消息,然后保存offset。如果消息处理成功之后,但是在保存offset阶段zookeeper异常导致保存操作未能执行成功,这就导致接下来再次fetch时可能获得上次已经处理过的消息,这就是"at least once",原因offset没有及时的提交给zookeeper,zookeeper恢复正常还是之前offset状态。
  • exactly once:消息只会发送一次。kafka中并没有严格的去实现(基于2阶段提交),我们认为这种策略在kafka中是没有必要的。

通常情况下"at-least-once"是我们首选。

Kafka消息存储格式

Topic & Partition

一个topic可以认为一个一类消息,每个topic将被分成多个partition,每个partition在存储层面是append log文件。

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

  • 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  • 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。

这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。

  • segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
  • segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析),有需要的朋友可以戳这里即可免费领取

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

算法刷题(PDF)

百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)**

[外链图片转存中…(img-AytFmDN4-1626013725867)]

算法刷题(PDF)

java人脸识别开源算法,就是这么简单相关推荐

  1. 离线java人脸识别开源算法_Java 离线人脸识别 基于ArcFace 2.0 Demo

    开发环境准备: 开发使用到的软件和工具: Jdk8.mysql5.7.libarcsoft_face.dll(so).libarcsoft_face_engine.dll(so).libarcsoft ...

  2. 人脸识别开源库face_recognition的简单介绍

    人脸识别开源库face_recognition的简单介绍 原文出处: https://blog.xugaoxiang.com/ai/face-recognition-cnn.html 软硬件环境 ub ...

  3. 人脸识别开源项目--insightface

    目录 1 insightface简介 2 安装insightface 3 使用insightface 4 结合Flask框架 1 insightface简介 最近人脸识别等机器学习的项目很火,偶然间发 ...

  4. face.evoLVe:高性能人脸识别开源库,内附高能模型

    点击我爱计算机视觉标星,更快获取CVML新技术 目前人脸识别开源项目众多,但真正能方便快捷拿来就用.性能指标业界领先的开源库并不多,而最近刚刚开源的face.evoLVe绝对是不容忽视的力量. 项目地 ...

  5. 人脸识别(8)----人脸识别主要算法原理

    人脸识别主要算法原理   [嵌牛导读]:人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行 ...

  6. 人脸识别主要算法原理和公司

    人脸识别主要算法原理和公司 机器视觉与识别|字号 订阅 主流的人脸识别技术基本上可以归结为三类,即:基于几何特征的方法.基于模板的方法和基于模型的方法. 1. 基于几何特征的方法是最早.最传统的方法, ...

  7. 人脸识别的算法基本原理

    人脸识别不管是在手机还是别的什么地方都无疑是一种比较火的解锁方式,看了一篇关于这个算法的文章,写的挺好的,转载一下,共享,感谢原博主辛苦的创作,致敬! 人脸识别主要算法原理 主流的人脸识别技术基本上可 ...

  8. 人脸识别系列算法原理

    目录 1.Eigenfaces(特征脸)算法 基本思想 Eigenfaces算法过程 2.FisherFace算法 基本思想 Fisherface算法流程 3.LBPH(Local Binary Pa ...

  9. 基于JAVA人脸识别公司签到系统(Springboot框架+AI人工智能) 开题报告

      本科生毕业论文 基于Java(springboot框架)人脸识别公司签到系统 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师:   XXXX大学本 ...

  10. 2020/11/13·Java·人脸识别一键登录/注册

    Java·人脸识别一键登录/注册 1.eclipse 和 tomcat 服务器的安装与使用 1.1 Eclipse 的安装 1.2 Eclipse 配置 Tomcat 1.3 新建 Web 项目 1. ...

最新文章

  1. 汇总 | 深度学习中图像语义分割基准数据集详解
  2. python标准异常
  3. mysql创建和删除用户
  4. 阿里的“扫地僧”,2年“抄”了20万页古籍
  5. VS中解决LIBCMTD.lib和uafxcwd.lib冲突(uafxcw.lib LIBCMT.lib冲突)
  6. 通达信波段王指标公式主图_通达信指标公式源码超赢天下主图源码
  7. julia自然常数_Julia中的Sys.KERNEL常数
  8. 中国风海报设计模板,东方韵味尽显
  9. Android将应用调试log信息保存在SD卡
  10. SQL2005触发器和存储过程
  11. 10 个最佳的支持触摸操作的 JavaScript 框架
  12. openpyxl安装_Openpyxl玩转Excel(一)——新建、读取、复制
  13. 微波工程基础_军工央企丨上海微波设备研究所
  14. Junit单元测试的基本编码步骤
  15. 踩过坑的可控硅设计 经验总结
  16. Java笔记——关于设置自定义字体、全局字体方面和getFont()的使用
  17. 大话设计模式笔记(二十四)の解释器模式
  18. mongoDB快速入门
  19. JAVA匹配所有英文_java匹配汉字、英文、数字
  20. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

热门文章

  1. vba模拟鼠标点击_手把手教罗技鼠标宏挂通行证编程
  2. java并发包源码分析
  3. 免费版本的mysql与收费版本的区别
  4. CCS12.0 安装并设置中文
  5. Python各版本的差异总结
  6. 一个完整的计算器c语言源代码,分享一个C语言的计算器源代码
  7. JDK下载与安装教程(最简单版)
  8. 滤波器基础06——滤波器设计软件
  9. 计算机会计定制性,金蝶会计软件定制
  10. 交通灯倒计时c语言程序,交通灯C语言程序,T89S52单片机控制,倒计时,红黄绿灯.doc...