原理阐述

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. SpringMVC底层——请求参数处理流程描述

    在DispatcherServlet.java的doDispatch方法中,springmvc通过handlermapping里面找哪个handler能处理请求,handler封装了目标方法的信息, ...

  2. 在 IDEA 里下个五子棋不过分吧?

    大家好,我是二哥呀!今天给大家分享一个基于Netty的IDEA即时聊天插件,可以实现即时聊天.游戏对战(下棋). GitHub 地址:https://github.com/anlingyi/xecha ...

  3. 彻底理解DDS(信号发生器)的fpga实现(verilog设计代码)

    DDS(Direct Digital Synthesis)是一种把一系列数字信号通过D/A转换器转换成模拟信号的数字合成技术. 它有查表法和计算法两种基本合成方法.在这里主要记录DDS查表法的fpga ...

  4. 多人共用一个Linux用户, 实现Bash配置文件独立

    本文中提到的 账户, 用户 均表示同一概念. 例如 ssh wbourne@192.168.xxx.101, 账户, 用户 指的均是 wbourne. 背景 在工作中, 我们经常会连接Linux服务器 ...

  5. LGV 引理

    (其实是贺的:https://www.luogu.com.cn/paste/whl2joo4) 目录 LGV 引理 不相交路径计数 例题 Luogu6657. [模板]LGV 引理 CF348D Tu ...

  6. Yii项目知识搜集

    [['rId','advertiser_id','image_file'], 'unique','targetAttribute'=>['rId','advertiser_id','image_ ...

  7. Odoo14 ir.rule 中的domain查询语句

    # ir.rule 中的domain查询语句 # 当你的字段是many2one.many2many.one2many的时候domain都会强制加上过滤域 # tree显示的时候也会过滤 # m.mod ...

  8. Less混合结合:nth-child()选择器的高级玩法

    1.先看效果图 上图中比较麻烦的是每块的底色处理,下面看怎么处理 2.:nth-child(n) 选择器 匹配属于其父元素的第 N 个子元素,不论元素的类型. n 可以是数字.关键词或公式. 数字:最 ...

  9. [开源内卷] .NET 定时任务 -- FreeScheduler 支持 cron、持久化、可变定时设置

    前言 卷了,卷了,卷了,最近太卷...这篇文章写了好几天了,由于同类型文章太多,排期到今天发布.实在不想卷,得罪了!各位定时任务开源大佬们! .NET 定时组件生态实在太强大了,写下此文只希望能供大家 ...

  10. 分布式版本控制系统Git的使用;

    1.什么是Git Git是一个分布式的版本控制软件: 软件,类似于qq.office等安装到电脑才能使用的工具. 版本控制,类似于毕业论文,视频剪辑等需要反复修改和保留原历史数据: 分布式 文件夹拷贝 ...