原理阐述

Producer生产者是数据的入口,它先将数据序列化后于内存的不同队列中,它用push模式再将内存中的数据发送到服务端的broker,以追加的方式到各自分区中存储。生产者端有两大线程,以先后的顺序,分别负责各自的任务处理,可并行或同步的方式,完成生产者端的所有处理过程。

生产者端的两大线程

  • 生产者线程:先将数据按规则放到内存当中
  • Sender线程:再将内存中的数据发送到broker

生产者线程

生产者线程发送数据,经过序列化后再内存中分队列存储,每个队列中的数据块默认为16K,每个数据块的过期时间为0ms。

内存当中有多个分区队列,生产者线程的分区工作原理/三大分区策略:

  • 线程中的send方法指定分区号的,按指定分区存放
  • 线程中的send方法无分区号的,有 key value 的,按key的hash值计算出一个固定区号存放
  • 线程中的send方法只有value的,一个数据块填满后,随机按序平均存放到不同的分区

生产者线程也可以自定义分区策略

  • 自定义类实现 Partitioner 接口
  • 重写 Partition 方法(按收到的消息,指定到分区)
  • 实现类配置到 Producer Properties 中

Sender线程

Sender线程处理生产者线程于内存中的队列数据块,它建立内存队列与服务端broder分区的数据通道,当数据块达到16K或超过过期时间,从内存中取出数据块并发送到服务端broker对应的分区;默认情况下,不用等broker分区的应答,最多连续发送5个数据块,失败时重发;数据块发送成功后,内存队列中的相应数据块删除,再进行下一次的发送。

服务端broker分区中,有两种不同的角色,leader 和 副本,leader负责接收数据,并把数据同步给各个副本以做备份,当Leader发送异常状况后,可启用副本继续运行。后续章节再继续阐述broker分区的内容。

当Sender线程将内存中的数据块发送给服务端的broker leader 时,borker 对 Sender线程的应答机制:

  • 0:broker leader接收的数据,不用等保存到磁盘就及时应答给Sender线程
  • 1:leader保存磁盘后,不用等同步给副本,就应答给负责发送的Sender线程
  • 2、leader和副本全部都磁盘保存完成后,再应答给负责发送的Sender线程

按实际场景可以选择broker不同的应答机制:

如果对数据的完整性要求最高的话,应答机制2是最好的选择,如银行流水数据;

如果对处理速度要求最高的话,允许偶然个别数据的缺失,应答机制0是最好的选择,如日志。

生产者端 - 整体运行图

为了更好的直观的便于理解,以图例方式展现上述所有的阐述内容:

上图需要关注的点:
序列化的数据压缩方式、
数据分区策略、
内存总大小、
内存数据块大小、
数据块过期时间、
broker应答机制。

我的 Kafka 旅程 - Producer的更多相关文章

  1. 【转】 详解Kafka生产者Producer配置

    粘贴一下这个配置,与我自己的程序做对比,看看能不能完善我的异步带代码:   -----------------------------------------    详解Kafka生产者Produce ...

  2. Kafka的Producer和Consumer源码学习

    先解释下两个概念: high watermark (HW) 它表示已经被commited的最后一个message offset(所谓commited, 应该是ISR中所有replica都已写入),HW ...

  3. Kafka学习-Producer和Customer

    在上一篇kafka入门的基础之上,本篇主要介绍Kafka的生产者和消费者. Kafka 生产者 kafka Producer发布消息记录到Kakfa集群.生产者是线程安全的,可以在多个线程之间共享生产 ...

  4. Error when sending message to topic test with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

    windows下使用kafka遇到这个问题: Error when sending message to topic test with key: null, value: 2 bytes with ...

  5. kafka 客户端 producer 配置参数

    属性 描述 类型 默认值 bootstrap.servers 用于建立与kafka集群的连接,这个list仅仅影响用于初始化的hosts,来发现全部的servers.格式:host1:port1,ho ...

  6. Kafka遇到30042ms has passed since batch creation plus linger time at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:94)

    问题描述: 运行生产者线程的时候显示如下错误信息: Expiring 1 record(s) for XXX-0: 30042 ms has passed since batch creation p ...

  7. 057 Java中kafka的Producer程序实现

    1.需要启动的服务 这里启动的端口是9092. bin/kafka-console-consumer.sh --topic beifeng --zookeeper linux-hadoop01.ibe ...

  8. Kafka: Producer (0.10.0.0)

    转自:http://www.cnblogs.com/f1194361820/p/6048429.html 通过前面的架构简述,知道了Producer是用来产生消息记录,并将消息以异步的方式发送给指定的 ...

  9. 【Kafka】Producer配置

    名称 描述 类型 默认值 bootstrap.servers kafka集群地址,ip+端口,以逗号隔开.不管这边配置的是什么服务器,客户端会使用所有的服务器.配置的列表只会影响初始发现所有主机.配置 ...

随机推荐

  1. 基础算法学习以及$STL$的使用

    1.优先队列 (1)大根堆(小顶堆) priority_queue<int,vector<int>,greater<int> >q; (2)小根堆(大顶堆) pri ...

  2. python jinjia2 使用语法

    简介 对于jinjia2来说,模板仅仅是文本文件,可以生成任何基于文本的文件格式,例如HTML.XML.CSV.LaTex 等等,以下是基础的模板内容: <!DOCTYPE html> & ...

  3. Bert不完全手册6. Bert在中文领域的尝试 Bert-WWM & MacBert & ChineseBert

    一章我们来聊聊在中文领域都有哪些预训练模型的改良方案.Bert-WWM,MacBert,ChineseBert主要从3个方向在预训练中补充中文文本的信息:词粒度信息,中文笔画信息,拼音信息.与其说是推 ...

  4. 汇编语言基于8086CUP(想学操作系统的前奏!!!)

    汇编语言基于8086CUP(想学操作系统的前奏!!!) 1.汇编语言的产生 1.1.思维图 1.2.单位转换 1B=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1 ...

  5. Changes in GreatSQL 8.0.25-16(2022-5-16)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1.新增特性 1.1 新增仲裁节点(投票节点)角色 1.2 新增快速单主模式 1.3 新增MGR网络开销阈值 1.4 ...

  6. DolphinScheduler 新晋 Committer 成员啦

    Apache DolphinScheduler在2021年的3月18号正式成为 Apache 顶级项目后,就又迎来了好消息,经过Apache DolphinScheduler PMC们的推荐和投票, ...

  7. 实现一个会动的鸿蒙 LOGO

    本文将带大家简单实现一个会动的鸿蒙 LOGO. emmm,写本文的动机是之前在掘金看到一篇实现鸿蒙 LOGO 的文章 -- 产品经理:鸿蒙那个开场动画挺帅的 给咱们页面也整一个呗 鸿蒙的 LOGO 本 ...

  8. 数据结构与算法【Java】03---栈

    前言 数据 data 结构(structure)是一门 研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构才可以编写出更加漂亮,更加有效率的代码. 要学习好数据结构就要多多考虑如何将生 ...

  9. Spring源码 03 IOC原理

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  10. RocketMQ保姆级教程

    大家好,我是三友~~ 上周花了一点时间从头到尾.从无到有地搭建了一套RocketMQ的环境,觉得还挺easy的,所以就写篇文章分享给大家. 整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作 ...