Debug

  1. 参照debug文章在intellij中启动Kafka

  2. terminal 发送请求:

    bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test

服务端的交互

通过分析发现交互的请求协议如下

ApiVersions Metadata ApiVersions Produce....

细节分析

  1. ApiVersions

    返回 broker 是否支持client version

  2. Metadata

    获取broker信息, 以及相应的partition信息(client会选择负载最轻的一个节点broker获取 metadata)

  3. ApiVersions

    同上

  4. Produce 主要的流程

    ReplicaManager#appendRecords -> #appendToLocalLog -> Partition#appendRecordsToLeader -> Log#appendAsLeader -> #append -> LogSegment#append -> FileRecords#append -> MemoryRecords#writeFullyTo  

faq

  1. 为什么两次 ApiVersins ?