引子

上一篇介绍了KafkaProducer的初始化的过程,这一篇将会介绍KafkaProducer消息发送流程,同样以源码中的examples为例。

我们实现的回调方法,用于提供请求完成的异步处理,这种方法将在已确认发送到服务器的记录时调用。

深入Producer的发送方法

这一篇文章只会对发送的总体做一个介绍,后面的文章将对每个步骤进行深入的去分析。

异步将记录发送到主题,并在确认发送后调用提供的回调。发送是异步的,一旦记录存储在等待发送的记录缓冲区中,此方法将立即返回。这允许并行发送多个记录,而无需在每个记录之后等待响应。

发送的结果是一个RecordMetadata,指定将记录发送到的分区、分配的偏移量和记录的时间戳。如果主题使用CreateTime,则时间戳将是用户提供的时间戳,如果用户没有为记录指定时间戳,则时间戳将是记录发送时间。如果主题使用LogAppendTime,则在追加消息时,时间戳将是Kafka代理的本地时间。

因为send调用是异步的,所以它返回将分配给此记录的RecordMetadata的未来。在这个将来调用get()将被阻塞,直到相关的请求完成,然后返回记录的元数据,或者引发发送记录时发生的任何异常。

send方法总共将分为八个步骤:

步骤一:同步等待拉取元素据

步骤二:对消息的key和value进行序列化

步骤三:根据分区器选择消息应该发送的分区

步骤四:确认一下消息的大小是否超过了最大值上篇介绍初始化的时候设置了这个值max.request.size

步骤五:根据元素据,封装分区对象

步骤六:给每一条消息都绑定他的回调函数

步骤七:把消息放入accumulator,然后accumulator把消息封装成一个批次的去发送

步骤八:唤醒sender线程。他才是真正的发送数据的线程

总结

这一篇知识介绍了Kafka Producer发送的一个总体的流程,接下来的几篇文章将介绍元素据的拉取、如何选择分区、RecordAccumulator的追加方式等进行一个深入的分析。

如果你对发送的流程感兴趣的话,请加个关注哦,谢谢你的支持!

kafka实现异步发送_深入理解Kafka的发送流程相关推荐

  1. 取本地数据_深入理解Kafka服务端之Follower副本如何同步Leader副本的数据

    一.场景分析Kafka采用的是主写主读的方式,即客户端的读写请求都由分区的Leader副本处理,那么Follower副本要想保证和Leader副本数据一致,就需要不断地从Leader副本拉取消息来进行 ...

  2. tp5 聚合max获取不到string最大值_深入理解Kafka客户端之如何获取集群元数据

    一.场景说明 当我们初始化一个Kafka生产者后(初始化流程可以查看<Kafka源码解析之生产者初始化流程>),通过该生产者将封装好的消息发送出去,示例代码仍然参考example模块下的P ...

  3. kafka 发布-订阅模式_使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

    kafka 发布-订阅模式 发布-订阅消息系统在任何企业体系结构中都起着重要作用,因为它可以实现可靠的集成而无需紧密耦合应用程序. 在解耦的系统之间共享数据的能力并不是一个容易解决的问题. 考虑一个企 ...

  4. kafka计算机专业读法_终于知道Kafka为什么这么快了!

    Kafka 为什么能那么快 | Kafka高效读写数据的原因 无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能(好简单的样子),一是 Producer 生产的数据存到 broker ...

  5. python数据如何用蓝牙发送_使用Python3通过蓝牙发送消息

    我正在尝试从Python3向Arduino(使用HC-06)发送消息.我设法建立了一个连接,但似乎找不到正确的方式来发送消息.在 下面是我用来设置连接的代码(我使用PyBluez来实现蓝牙):impo ...

  6. kafka 启动_深入理解Kafka服务端之Acceptor线程是如何启动和工作的

    一.场景分析上一篇讲到了Kafka网络通信采用了Java NIO的主从Reactor多线程模型,而Acceptor就是Kafka网络通信中很重要的一个线程对象.它通过selector接收客户端的连接请 ...

  7. kafka 两段式提交_如何理解两阶段提交?

    在分布式系统中,为了让每个节点都能够感知到其他节点的事务执行状况,需要引入一个中心节点来统一处理所有节点的执行逻辑,这个中心节点叫做协调者(coordinator),被中心节点调度的其他业务节点叫做参 ...

  8. 服务端设置忽略更新_深入理解Kafka服务端之日志对象的读写数据流程

    一.场景分析 在前面几篇分析过,Log类用于管理服务端日志相关的各种操作,如: 日志段管理:滚动生成新日志段.组织并管理分区下的所有日志段等 关键偏移量管理:如LogStartOffset.LEO等 ...

  9. kafka数据 落盘_终于知道Kafka为什么这么快了!

    " 无论 Kafka 作为 MQ 也好,还是作为存储层也罢,无非就是两个功能,一是 Producer 生产的数据存到 Broker,二是 Consumer 从 Broker 读取数据. 图片 ...

最新文章

  1. FFmpeg中libswresample库简介及测试代码
  2. CI报Disallowed Key Characters的解决
  3. tableau系列之如何将甘特图做成瀑布图
  4. 弈剑行:几经曲折却遇开服宕机,克服困难单机上线,他们不妥协
  5. java和golang性能_Java本质和性能
  6. MyBatis的CURD
  7. QQ邮箱自动登录问题--frame嵌套元素定位
  8. 软考资料已经 ready,你get 到了吗?
  9. 2019dnf刷图脚本制作教程
  10. 计算机低级格式化,硬盘格式化之低级格式化
  11. 微商怎么推广引流?学会玩豆瓣让精准流量源源不断
  12. 只需要MTK工程的bin文件、手机和下载线便可以修改各种手机软件
  13. tplink控制上网设备_tplink路由器如何控制小孩的使用上网时间
  14. PLC可编程控制器控制热水供暖循环系统实训
  15. windows 平台下curl使用报错: (3) [globbing] unmatched close brace/bracket in column 13
  16. 8款惊艳的HTML5粒子动画特效,超级惊艳 8款HTML5动画特效推荐源码
  17. C#中 out 参数的使用
  18. New Year and Hurry
  19. 方程:方程(equation)是指含有未知数的等式
  20. android 动画实现倒车,一种快速实现Android车机冷启动全景倒车的方法与流程

热门文章

  1. 【Kafka】Kafka 2.6新功能:消费者主动触发Rebalance
  2. 【ES】ES 拼音 Pinyin 分词器
  3. 【kafka】kafka_2.11-1.1.0 配置 SASL_PLAINTEXT 认证方式
  4. drools 7.x KIE API解析
  5. MySQL 本可以用Workbench,为什么还要Navicat
  6. 云计算实战系列十三(Linux计划任务)
  7. 为什么代码规范要求SQL语句不要过多的join?
  8. springMVC数据格式转换的三种实现
  9. VCL组件之Name属性
  10. SpringBoot Redis缓存 @Cacheable、@CacheEvict、@CachePut