前言

高并发,几乎是每个程序员都想拥有的经验。原因很简单:随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。

在过往的面试中,如果候选人做过高并发的项目,我通常会让对方谈谈对于高并发的理解,但是能系统性地回答好此问题的人并不多,大概分成这样几类:

1、对数据化的指标没有概念:不清楚选择什么样的指标来衡量高并发系统?分不清并发量和QPS,甚至不知道自己系统的总用户量、活跃用户量,平峰和高峰时的QPS和TPS等关键数据。

2、设计了一些方案,但是细节掌握不透彻:讲不出该方案要关注的技术点和可能带来的副作用。比如读性能有瓶颈会引入缓存,但是忽视了缓存命中率、热点key、数据一致性等问题。

3、理解片面,把高并发设计等同于性能优化:大谈并发编程、多级缓存、异步化、水平扩容,却忽视高可用设计、服务治理和运维保障。

4、掌握大方案,却忽视最基本的东西:能讲清楚垂直分层、水平分区、缓存等大思路,却没意识去分析数据结构是否合理,算法是否高效,没想过从最根本的IO和计算两个维度去做细节优化。

一、对Kafka的认识

1.Kafka的基本概念

java在线编译器菜鸟_Java

2.安装与配置

java在线编译器菜鸟_Java_02

3.生产与消费

java在线编译器菜鸟_java_03

4.服务端参数配置

java在线编译器菜鸟_经验分享_04

二、生产者

1.客户端开发

  • 必要的参数配置
  • 消息的发送
  • 序列化
  • 分区器
  • 生产者拦截器

java在线编译器菜鸟_经验分享_05

2.原理分析

  • 整体架构
  • 元数据的更新

java在线编译器菜鸟_Java_06

3.重要的生产者参数

java在线编译器菜鸟_面试_07

三、消费者

1.消费者与消费组

java在线编译器菜鸟_java在线编译器菜鸟_08

2.客户端开发

  • 必要的参数配置
  • 订阅主题与分区
  • 反序列化
  • 消息消费
  • 位移提交
  • 控制或关闭消费
  • 指定位移消费
  • 再均衡
  • 消费者拦截器
  • 多线程实现
  • 重要的消费者参数

java在线编译器菜鸟_面试_09

四、主题与分区

1.主题的管理

  • 创建主题
  • 分区副本的分配
  • 查看主题
  • 修改主题
  • 配置管理
  • 主题端参数
  • 删除主题

java在线编译器菜鸟_Java_10

2.初识KafkaAdminCilent

  • 基本使用
  • 主题合法性验证

java在线编译器菜鸟_java_11

3.分区的管理

  • 优先副本的选举
  • 分区重分配
  • 复制限流
  • 修改副本因子

java在线编译器菜鸟_java在线编译器菜鸟_12

4.如何选择合适的分区数

  • 性能测试工具
  • 分区数越多吞吐量就越高吗
  • 分区数的上限
  • 考量因素

java在线编译器菜鸟_面试_13

五、日志存储

1.文件目录布局

java在线编译器菜鸟_java在线编译器菜鸟_14

2.日志格式的演变

  • v0版本
  • v1版本
  • 消息压缩
  • 变长字段
  • v2版本

java在线编译器菜鸟_Java_15

3.日志索引

  • 偏移量索引
  • 时间戳索引

java在线编译器菜鸟_java_16

4.日志清理

  • 日志删除
  • 日志压缩

java在线编译器菜鸟_面试_17

5.磁盘存储

  • 页缓存
  • 磁盘I/O流程
  • 零拷贝

java在线编译器菜鸟_java_18

六、深入服务端

1.协议设计

java在线编译器菜鸟_Java_19

2.时间轮

java在线编译器菜鸟_经验分享_20

3.延时操作

java在线编译器菜鸟_经验分享_21

4.控制器

java在线编译器菜鸟_java在线编译器菜鸟_22

5.参数解密

java在线编译器菜鸟_java在线编译器菜鸟_23

七、深入客户端

1.分区分配策略

java在线编译器菜鸟_经验分享_24

2.消费者协调器和组协调器

java在线编译器菜鸟_java在线编译器菜鸟_25

3._consumer_offsets剖析

java在线编译器菜鸟_经验分享_26

4.事务

java在线编译器菜鸟_java在线编译器菜鸟_27

八、可靠性探究

1.副本剖析

java在线编译器菜鸟_面试_28

2.日志同步机制

java在线编译器菜鸟_Java_29

3.可靠性分析

java在线编译器菜鸟_java在线编译器菜鸟_30

九、Kafka应用

1.命令行工具

java在线编译器菜鸟_面试_31

2.Kafka Connect

java在线编译器菜鸟_java_32

3.Kafka Mirror Maker

java在线编译器菜鸟_面试_33

4.Kafka Streams

java在线编译器菜鸟_经验分享_34

十、Kafka监控

1.监控数据的来源

java在线编译器菜鸟_Java_35

2.消费滞后

java在线编译器菜鸟_Java_36

3.同步失效分区

java在线编译器菜鸟_经验分享_37

4.监控指标说明

java在线编译器菜鸟_java_38

5.监控模块

java在线编译器菜鸟_Java_39

十一、高级应用

1.过期时间(TTL)

java在线编译器菜鸟_java在线编译器菜鸟_40

2.延时队列

java在线编译器菜鸟_Java_41

3.死信队列和重试队列

java在线编译器菜鸟_java在线编译器菜鸟_42

4.消息路由

java在线编译器菜鸟_java_43

5.消息轨迹

java在线编译器菜鸟_面试_44

6.消息审计

java在线编译器菜鸟_java在线编译器菜鸟_45

7.消息代理

java在线编译器菜鸟_经验分享_46

8.消息中间件选型

java在线编译器菜鸟_java在线编译器菜鸟_47

十二、Kafka与Spark的集成

1.Spark的安装及简单应用

java在线编译器菜鸟_面试_48

2.Spark编程模型

java在线编译器菜鸟_java在线编译器菜鸟_49

3.Spark的运行结构

java在线编译器菜鸟_java_50

4.Spark Streaming简介

java在线编译器菜鸟_java在线编译器菜鸟_51

5.Kafka与Spark Streaming的整合

java在线编译器菜鸟_Java_52

6.Spark SQL

java在线编译器菜鸟_经验分享_53

7.Structured Streaming

java在线编译器菜鸟_java在线编译器菜鸟_54

8.Kafka与Structured Streaming的整合

java在线编译器菜鸟_Java_55