8 Kafka 核心源码剖析

8 Kafka 核心源码剖析

更多干货

  • 分布式实战(干货)
  • spring cloud 实战(干货)
  • mybatis 实战(干货)
  • spring boot 实战(干货)
  • React 入门实战(干货)
  • 构建中小型互联网企业架构(干货)
  • python 学习持续更新
  • ElasticSearch 笔记
  • kafka storm 实战 (干货)

一、概述

  • 分区消费模式源码

  • 组消费模式源码

  • 两种消费模式服务器端源码对比

  • 同步发送模式源码介绍

  • 异步发送模式源码介绍

  • 两种生产模式服务器端源码对比

二、分区消费模式

8 Kafka 核心源码剖析_第1张图片

分区消费模式直接由客户端(任何高级语言编写) 使用Kafka提供的协议向服务器发送RPC请求获取数据,服务器接受到客户端的RPC请求后,将数据构造成RPC响应,返回给客户端,客户端解析相应的RPC响应获取数据。

Kafka支持的协议众多,使用比较重要的有:

  • 获取消息的FetchRequest和FetchResponse
  • 获取offset的OffsetRequest和OffsetResponse
  • 提交offset的OffsetCommitRequest和OffsetCommitResponse
  • 获取Metadata的Metadata Request和Metadata Response
  • 生产消息的ProducerRequest和ProducerResponse

8 Kafka 核心源码剖析_第2张图片

8 Kafka 核心源码剖析_第3张图片

三、两种消费模式服务器端源码对比

分区消费模式具有以下特点:

  • 指定消费topic、partition和offset通过向服务器发送RPC请求进行消费;
  • 需要自己提交offset;
  • 需要自己处理各种错误,如:leader切换错误
  • 需要自己处理消费者负载均衡策略

组消费模式具有以下特点:

  • 最终也是通过向服务器发送RPC请求完成的(和分区消费模式一样);
  • 组消费模式由Kafka服务器端处理各种错误,然后将消息放入队列再封装为迭代器(队列为FetchedDataChunk对象) ,客户端只需在迭代器上迭代取出消息;
  • 由Kafka服务器端周期性的通过scheduler提交当前消费的offset,无需客户端负责
  • Kafka服务器端处理消费者负载均衡
  • 监控工具Kafka Offset Monitor 和Kafka Manager 均是基于组消费模式;

所以,尽可能使用组消费模式,除非你需要:

  • 自己管理offset(比如为了实现消息投递的其他语义);
  • 自己处理各种错误(根据自己业务的需求);

四、Kafka生产者源码介绍

同步发送模式源码介绍

8 Kafka 核心源码剖析_第4张图片

异步发送模式源码介绍

8 Kafka 核心源码剖析_第5张图片 8 Kafka 核心源码剖析_第6张图片

同步发送模式具有以下特点:

  • 同步的向服务器发送RPC请求进行生产;
  • 发送错误可以重试;
  • 可以向客户端发送ack;

异步发送模式具有以下特点:

  • 最终也是通过向服务器发送RPC请求完成的(和同步发送模式一样);
  • 异步发送模式先将一定量消息放入队列中,待达到一定数量后再一起发送;
  • 异步发送模式不支持发送ack,但是Client可以调用回调函数获取发送结果;

所以,性能比较高的场景使用异步发送,准确性要求高的场景使用同步发送

你可能感兴趣的:(【大数据】,【构建高可用架构】,【kafka】)