目录

  • 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填充。

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!
另外本人整理收藏了多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,
下方只是部分截图 想要资料的话可以戳这里即可免费领取。

家,
下方只是部分截图 想要资料的话可以戳这里即可免费领取。**

【微信小程序】java中类和对象的区别相关推荐

  1. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  2. 微信小程序 科学计算器(微信小程序+java+python)

    微信小程序之科学计算器 (微信小程序+java+python) 先把自己的小程序和页面贴出来 1.前后端实现步骤: 1.前端采用的就是微信小程序开发工具,后端采用的是以springboot为基础,调用 ...

  3. (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好

    转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...

  4. 微信小程序-JAVA实现微信支付功能(微信支付2.0)

    微信小程序-JAVA实现微信支付功能(微信支付2.0) 一.前言 本博客主要介绍JAVA后台与微信小程序(UNI-APP或者原生微信小程序)的微信支付的实现,如果是APP或者H5的开发暂时不支持,具体 ...

  5. 微信小程序给数组、对象赋值

    微信小程序给数组.对象赋值 给定义的对象赋值://公司名称getCompanyNmae(e: any) {this.setData!({'where.companyName': e.detail.va ...

  6. 驾校分期-众筹项目java前后端分离项目vue(微信小程序+java前后端源码下载)

    可以idea直接打开,mysql数据库项目,前后端分离项目vue,分期可自动设置,自动换算金额 驾校分期-众筹项目java前后端分离项目vue(微信小程序+java前后端源码下载)

  7. 微信小程序中,json对象与字符串相互转换

    微信小程序中,json对象转字符串,以及字符串转json对象,具体代码如下: //这是一个json对象 var jsonobj = {"orderId":"3308908 ...

  8. 微信小程序 java 传值_微信小程序传值获取值的实例方法

    微信小程序传值以及获取值方法的详解 微信小程序传值以及获取值方法,传值有两种方法,对应也有获取值得方法, 1.设置id的方法标识跳转后传递的参数值: 2.通过使用data - xxxx 的方法来标识要 ...

  9. uni-app微信小程序+Java实现百度语音识别

    1.准备工作 由于微信小程序和百度语音识别的记录博客少之又少,所以这篇博客就诞生了. 注册登录百度AI开放平台(http://ai.baidu.com/) 找到语音技术 - 应用列表,创建应用,填写相 ...

  10. 微信小程序 java服务器发送通知给用户 全流程 (获取openid 获取formid)

    本文写的比较简单,只是一个简单的实现,如有错误,欢迎大家指出,本文为个人学习笔记,只供参考. 如果成功了给句评论,或来个赞呗! 本文大致分为三个内容: 一.注册小程序 二.微信小程序开发代码 三.ja ...

最新文章

  1. IText实现url转pdf, 解决中文字体问题
  2. HDU - 5592 ZYBs Premutation(线段树,逆序对)
  3. 点对点 客户端-服务器 聊天程序
  4. Visual Studio 清单(manifest)导致的问题
  5. 提高python执行效率_提升Python程序运行效率的6个方法
  6. Python 中 if __name__ == '__main__': 的理解
  7. leetcode 116 --- 填充每个节点指向最右节点的next指针
  8. 命令02-pandas命令
  9. Java架构师成长之道之计算机组成原理组成篇
  10. LeetCode(283)——移动零(JavaScript)
  11. NLP 算法工程师的学习、成长和实战经验
  12. MySQL进阶之SQL优化
  13. 语音识别中的MFCC的提取原理和MATLAB实现
  14. 18. C语言 -- 指针数组和数组指针
  15. scheduled一分钟执行一次_Spring 中使用 @Scheduled 创建定时任务
  16. 王牌战争服务器维护中多少才能玩,王牌战争最低配置要求一览 什么手机可以玩...
  17. [CATransaction flush] 作用详解
  18. 从零到一搭建基础架构(2)-如何构建基础架构模块划分
  19. Android端外推送到底有多烦?(转载自一个1000万用户App的CTO的对推送的看法)
  20. 字节跳动算法一面2-120201106

热门文章

  1. 堆和栈组合:双端队列c++
  2. cudnn.h: No such file or directory
  3. [TensorRT] ERROR: Network must have at least one output
  4. 脊回归(Ridge Regression) 岭回归
  5. PyTorch 0.4新版本 升级指南 no_grad
  6. 在编程和算法领域,有哪些经典问题
  7. 使用 GNU profiler 来提高代码运行速度
  8. opencv3 ubuntu安装脚本
  9. 华为防火墙安全区域介绍
  10. 十六、Redis三种特殊类型之三Bitmap