【从客户端理解Kafka的使用方式】

文章目录

  • 一、从基础的客户端说起
    • 1、消息发送者主流程
    • 2、消息消费者主流程
  • 二、从客户端属性来梳理客户端工作机制

这一部分主要是从客户端使用的角度来理解Kakfa的重要机制。重点依然是要建立自己脑海中的Kafka消费
模型。Kafka的HighLevel API使用是非常简单的,所以梳理模型时也要尽量简单化,主线清晰,细节慢慢扩
展。
Kafka提供了两套客户端API,HighLevel API和LowLevel API。 HighLevel API封装了kafka的运行细
节,使用起来比较简单,是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管
理Kafka的运行细节,Partition,Offset这些数据都由客户端自行管理。这层API功能更灵活,但是使
用起来非常复杂,也更容易出错。只在极少数对性能要求非常极致的场景才会偶尔使用。我们的重点
是HighLeve API 。

一、从基础的客户端说起

Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可:

1、消息发送者主流程

然后可以使用Kafka提供的Producer类,快速发送消息。
整体来说,构建Producer分为三个步骤:

  1. 设置Producer核心属性 :Producer可选的属性都可以由ProducerConfig类管理。比如
    ProducerConfig.BOOTSTRAP_SERVERS_CONFIG属性,显然就是指发送者要将消息发到哪个Kafka集
    群上。这是每个Producer必选的属性。在ProducerConfig中,对于大部分比较重要的属性,都配置了
    对应的DOC属性进行描述。
  2. 构建消息:Kafka的消息是一个Key-Value结构的消息。其中,key和value都可以是任意对象类型。其
    中,key主要是用来进行Partition分区的,业务上更关心的是value。
  3. 使用Producer发送消息。:通常用到的就是单向发送、同步发送和异步发送者三种发送方式。

2、消息消费者主流程

接下来可以使用Kafka提供的Consumer类,快速消费消息。
整体来说,Consumer同样是分为三个步骤:

  1. 设置Consumer核心属性 :可选的属性都可以由ConsumerConfig类管理。在这个类中,同样对于大部
    分比较重要的属性,都配置了对应的DOC属性进行描述。同样BOOTSTRAP_SERVERS_CONFIG是必须
    设置的属性。
  2. 拉取消息:Kafka采用Consumer主动拉取消息的Pull模式。consumer主动从Broker上拉取一批感兴趣
    的消息。
  3. 处理消息,提交位点:消费者将消息拉取完成后,就可以交由业务自行处理对应的这一批消息了。只是
    消费者需要向Broker提交偏移量offset。如果不提交Offset,Broker会认为消费者端消息处理失败了,
    还会重复进行推送。
    Kafka的客户端基本就是固定的按照这三个大的步骤运行。在具体使用过程中,最大的变数基本上就是给
    生产者和消费者的设定合适的属性。这些属性极大的影响了客户端程序的执行方式。

二、从客户端属性来梳理客户端工作机制

渔与鱼:Kafka的客户端API的重要目的就是想要简化客户端的使用方式,所以对于API的使用,尽量熟练
就可以了。对于其他重要的属性,都可以通过源码中的描述去学习,并且可以设计一些场景去进行验证。其
重点,是要逐步在脑海之中建立一个Message在Kafka集群中进行流转的基础模型。
其实Kafka的设计精髓,是在网络不稳定,服务也随时会崩溃的这些作死的复杂场景下,如何保证消息的
高并发、高吞吐,那才是Kafka最为精妙的地方。但是要理解那些复杂的问题,都是需要建立在这个基础模
型基础上的。

相关推荐

  1. 客户理解Kafka使用方式

    2023-12-17 10:00:03       63 阅读
  2. Kafka客户快速使用

    2023-12-17 10:00:03       45 阅读
  3. Kafka客户实战

    2023-12-17 10:00:03       53 阅读
  4. ES客户RestHighLevelClient使用

    2023-12-17 10:00:03       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-17 10:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-17 10:00:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-17 10:00:03       82 阅读
  4. Python语言-面向对象

    2023-12-17 10:00:03       91 阅读

热门阅读

  1. CGAL的手柄和循环器

    2023-12-17 10:00:03       53 阅读
  2. 不设默认值(js的问题)

    2023-12-17 10:00:03       64 阅读
  3. 使用PyCharm创建Python项目

    2023-12-17 10:00:03       62 阅读
  4. linux基础知识面试题及一般面试技巧

    2023-12-17 10:00:03       57 阅读
  5. qt 正则表达式简单介绍

    2023-12-17 10:00:03       56 阅读
  6. 如何在PHP中实现单例设计模式?

    2023-12-17 10:00:03       66 阅读
  7. 探索计算机视觉的无限可能

    2023-12-17 10:00:03       68 阅读
  8. 相机传感器和镜头传感器面积关系

    2023-12-17 10:00:03       58 阅读
  9. 飞天使-docker知识点9-dockerfile补充

    2023-12-17 10:00:03       57 阅读