一次违反常规的Java大厂面试经历,重难点整理

目录

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

最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

点击《一线互联网大厂Java核心面试题库》即可免费领取,整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

…(img-PWPB8R6G-1626257210895)]

还有源码相关的阅读学习

[外链图片转存中…(img-OvpzyqGf-1626257210896)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一步搞定你疑惑的数据结构与算法系列,原理+实战讲解

蚂蚁金服一面: 下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。 面试的题目: HashMap和Hashtable的区别实现一个保证迭代顺序的HashMap说一说排序算法,稳定性,复…

互斥量(互斥锁)

一、互斥量mutex Linux提供一把互斥锁mutex(也称之为互斥量)每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束后解锁。资源还是共享的,线程间也还是竞争的,但通过锁将资源的访问变为互斥操作,而后与时间…

一眼就能看懂的Java自学手册,终局之战

珍藏版(1)——Mybatis入门 1.什么是MyBatis 2.为什么我们要用Mybatis? 3.Mybatis快速入门 3.1 导入开发包 3.2准备测试工作 3.3 创建mybatis配置文件 3.4 编写工具类测试是否获取到连接 3.5 创建实体与映射关系文件 3.6 编写DAO 4.Mybatis工作…

Java虚拟机学习集锦是我攒来的,带你碾压面试官!

1. 一致性(Consistency) 一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。 1.1 强一致性(Strict Consistency) 也称为…

Java虚拟机学习集锦是我攒来的,看这篇文章准没错!

一面 介绍一下自己 问项目经历, 聊"数据同步" 接着聊上了 K8S 的项目 有没有什么钻研得比较深得技术?(大佬:kubernetes, golang, prometheus, java) kubernetes 的架构是怎么样的? 这个问题很大,拆成 …

文件描述符、函数open和openat

文件描述符 pcb&#xff1a;结构体一个进程有一个文件描述符&#xff1a;1024文件描述符&#xff1a;寻找磁盘文件函数open和openat 函数原型&#xff1a; include<sys/stst.h> #include<fcntl.h>int open(const char *pathname, int flags); int open(const ch…

Java这些高端技术只有你还不知道,移动架构师成长路线

并发编程共享模型篇 并发编程概览进程与线程Java线程共享模型之管程共享模型之内存共享模型之无锁共享模型之不可变共享模型之工具 共享模型之管程 原理之 Monitor(锁) 原理之伪共享 模式篇—正确姿势 同步模式之保护性智停同步模式之Blking同步模式之顺序控制异步模式之生产…

函数read、write、lseek

函数原型&#xff1a; #include<unistd.h> ssize_t read(int fd, void *buf, size_t count);返回值&#xff1a;读到的字节数&#xff0c;若已到文件尾&#xff0c;返回0&#xff1b;若出错&#xff0c;返回-1 参数&#xff1a; fd&#xff1a;函数open的返回值buf&a…

Java这些高端技术只有你还不知道,薪资翻倍

正文 我的第一份工作是在一家外企&#xff0c;当时抱着“逃离”上海的想法去了二线城市的分公司&#xff0c;但是管理文化氛围跟总部几乎都是一样的&#xff0c;这份工作经历对我后面的工作不论是做事风格、习惯上还是思考问题的方式方法上都有很大的影响。后面陆续进入国企&a…

函数dup和dup2

函数原型&#xff1a; #include<unistd.h> int dup(int oldfd);返回值&#xff1a;若成功&#xff0c;返回新的文件描述符&#xff1b;若出错&#xff0c;返回-1 参数&#xff1a; oldfd&#xff1a;要复制的文件描述符dup调用成功&#xff1a;有两个文件描述符指向同…

Java进阶面试资料无偿分享!真香系列

8-22 投递简历 8-24 一面&#xff08;大概1h50min&#xff09; 0、currenthashmap怎么扩容的&#xff1f;fwn为什么固定hash -1&#xff0c;这样设计有什么好处&#xff1f;帮助扩容是发生在什么阶段?读线程和写线程都会帮助扩容吗&#xff1f;扩容的时候任务具体怎么协调的&…

Java通用流行框架大全,绝对干货

Java如何入门&#xff1f; 1、建立好开发环境 首先建立好开发环境非常重要&#xff0c;工欲善其事&#xff0c;必先利其器。做任何开发&#xff0c;首先就是要把这个环境准备好&#xff0c;之后就可以去做各种尝试&#xff0c;尝试过程中就能逐渐建立信心。初学者往往在环境配…

Java集合类中绝对占有一席之地的List,涨薪7K!

一、先来解读&#xff1a;23种设计模式要点 1.单例模式&#xff08;Singleton Pattern&#xff09; 2.工厂模式 3.抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 4.模板方法模式&#xff08;Template Method Pattern&#xff09; 5.建造者模式&#xff08;Bu…

Java面试10大知识点总结宝典助你通关!已拿意向书!

Java基础 1.Java语言的三大特性 2.Java语言主要特性 3. JDK和JRE有什么区别 4.Java基本数据类型及其封装类 5.如果main方法被声明为private会怎样? 6.说明- -下public static void main(String argsQ])这段声明里每个关键字的作用 7.与equals的区别 8.Object有哪些公用方法 9.…

互斥锁、条件变量

一、互斥锁 1. 函数原型&#xff1a; pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); pthread_mutex_destroy(pthread_mutex_t *mutex); 分析&#xff1a; pthread_mutex_t 类型&#xff0c;其本质是一个结构体&#xf…

Java面试你必须要知道的那些知识,深夜思考

如何提升自己的实力&#xff1f; Step 1&#xff1a;梳理自己的知识 对照下面这份学习大纲&#xff0c;梳理出自己的知识盲区&#xff0c;这份大纲里面的技术点完全对标P7岗的主流技术&#xff0c;因此这是一份很好的知识大纲笔记。 Step 2&#xff1a;查漏补缺&#xff0c;夯…

Java面试你必须要知道的那些知识,面试建议

二、面试题 面&#xff1a;考你几个红黑树的知识点&#x1f980; 红黑树的数据结构都用在哪些场景&#xff0c;有什么好处&#xff1f;红黑树的时间复杂度是多少&#xff1f;红黑树中插入新的节点时怎么保持平衡&#xff1f; 面&#xff1a;2-3树都是不没看&#xff0c;回去…

存储映射I/O(一)

一、存储映射I/O 存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区映射&#xff0c;于是当从缓冲区中取数据&#xff0c;就相当于读文件中的相应字节。于此类似&#xff0c;将数据存入缓冲区&#xff0c;则相应的字节就自动写入文件&#xff0c;这样&#xff0c;就可在不不…

【绝对干货】kafkastream广告

Java如何入门&#xff1f; 1、建立好开发环境 首先建立好开发环境非常重要&#xff0c;工欲善其事&#xff0c;必先利其器。做任何开发&#xff0c;首先就是要把这个环境准备好&#xff0c;之后就可以去做各种尝试&#xff0c;尝试过程中就能逐渐建立信心。初学者往往在环境配…

存储映射IO(二)

mmap父子进程间通信 1. 测试代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/wait.h>int var 100;int main(void) {int *p;pid_t pid;int fd;…