1. 使用 KafkaProducer 发送消息,是按 batch 发送的,producer 首先把消息放入 ProducerBatch 中:
org.apache.kafka.clients.producer.internals.ProducerBatch
2. KafkaProduer 类中有一个 Thread 属性,负责 IO,发送和接收数据:
            this.sender = new Sender(logContext,
client,
this.metadata,
this.accumulator,
maxInflightRequests == 1,
config.getInt(ProducerConfig.MAX_REQUEST_SIZE_CONFIG),
acks,
retries,
metricsRegistry.senderMetrics,
Time.SYSTEM,
this.requestTimeoutMs,
config.getLong(ProducerConfig.RETRY_BACKOFF_MS_CONFIG),
this.transactionManager,
apiVersions);
String ioThreadName = NETWORK_THREAD_PREFIX + " | " + clientId;
this.ioThread = new KafkaThread(ioThreadName, this.sender, true);
this.ioThread.start();

Sender 类实现了 Runnable 接口,封装了具体的逻辑,发送消息和接收响应都在这个类中。

// 发送消息
long pollTimeout = sendProducerData(now);
// 接收响应
client.poll(pollTimeout, now);

3. 执行回调

org.apache.kafka.clients.producer.internals.Sender#completeBatch()

最新文章

  1. PCA、ZCA白化
  2. libevent源码分析(一)
  3. 读javascript高级程序设计05-面向对象之创建对象
  4. android学习笔记54——ContentProvider
  5. Windows系统下安装Beautiful Soup4的步骤和方法
  6. 如何引用CSS样式表
  7. 用Python实现的一个简单的随机生成器
  8. Java编程杂记
  9. C# 计算器 如果设置键盘输入的监听事件
  10. 高性能双端js模板
  11. Java 之复合赋值运算符
  12. WinForm 控件(下)
  13. Tomcat、JBOSS、WebSphere、WebLogic、Apache等技术概述
  14. Vue多元素过渡
  15. Guake!
  16. 【Android】[Problem]-"Waiting for target device to come online".
  17. ugui SetParent在安卓上一个诡异bug
  18. shell中与运算 cut切分行 if while综合在一起的一个例子
  19. Tomcat篇
  20. Linux基础之 ---目录结构

热门文章

  1. Lists.newArrayListWithExpectedSize( int estimatedSize)
  2. java0425 wen IO
  3. 升级python2.7, 实现python2.7与python3并存
  4. vector某元素是否存在、查找指定元素 、去重
  5. TabLayout的高级使用
  6. JS高程关于ajax的学习笔记
  7. laravel框架——验证码(第一种方法)
  8. python_requests官方文档中文版
  9. hdu 4856 Tunnels 状态压缩dp
  10. MySQL 存储过程返回多个值