原理阐述

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. Solution -「ABC 217」题解

    D - Cutting Woods 记录每一个切割点,每次求前驱后驱就好了,注意简单判断一下开闭区间. 考场上采用的 FHQ_Treap 无脑莽. #include <cstdio> #i ...

  2. js入门基础

    JavaScript语言介绍 JavaScript的历史 诞生于1995年,最初名字叫做Mocha,1995年9月改为LiveScript.Netscape公司与Sun公司(Java语言的发明者)达成 ...

  3. 在docker中出现的僵尸进程怎么处理

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.发现问题 小玲是一名数据库测试人员,这一天她尝试在docker环境中部署GreatDB集群,结果在对greatsqld ...

  4. 设置Windows Server 2022、Win10、Win11自动登录的简单方法-OK

    这里介绍自己从使用 Windows Server 2003 到 Windows Server 2022 一直都在使用的自动登录系统的方法,屡试不爽.网上讨论的方法太繁琐,所以共享出来,供大家参考.该方 ...

  5. Luogu1769 淘汰赛制_NOI导刊2010提高(01)(概率DP)

    第\(i\)次位置在\(pos_0 / 2^{i - 1}\) #include <iostream> #include <cstdio> #include <cstri ...

  6. 重看Java教学视频时的查漏补缺

    数据类型 1.基本数据类型:四类八种. 2.数据范围与字节数不一定相关.如float为4字节表示范围比long的8字节要大. 3.浮点数默认double类型,如要用float,需加F. 4.boole ...

  7. 微信小程序检查版本更新并重启

    目录 1,前言 2,解决方案 3,调试须知 1,前言 最近开发小程序时候碰上了一个问题,当发布新版本小程序后,需要用户能赶紧用上最新的,避免出问题.查了一下官方文档,总结出几个情况如下: 微信运行时, ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. HTTP 的 Content-Type 及其媒体类型(MIME)

    Content-Type Content-Type 代表 HTTP 携带的文件类型,决定文件接收方或发送方将以什么形式.什么编码读取这个文件.下图,load.gif 的媒体类型就是 image/gif ...

  10. 生成 SSH 公钥

    什么是 SSH 一般的网络服务程序,如FTP.PoP和TelNet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据.而且,这些服务程序的安全验证 ...