Kafka核心技术与实战——21 | Java消费者是如何管理TCP连接的?

  • 何时创建TCP连接?
    • TCP连接是在调用KafkaConsumer.poll方法时被创造的。再细粒度较小,在poll方法内部有3个时机可以创建TCP连接
    • 1. 发起FindCoordinator请求时。
      • 消费者端有个组件叫协调者(Coordinator)
        • 它驻留在 Broker 端的内存中,负责消费者组的组成员管理和各个消费者的位移提交管理
        • 当消费者程序首次启动调用 poll 方法时,它需要向 Kafka 集群发送一个名为 FindCoordinator 的请求,希望 Kafka 集群告诉它哪个 Broker 是管理它的协调者
        • 消费者程序会向集群中当前负载最小的那台 Broker 发送请求
    • 2.连接协调者时
      • Broker 处理完上一步发送的 FindCoordinator 请求之后,会返还对应的响应结果(Response),显式地告诉消费者哪个 Broker 是真正的协调者
      • 因此在这一步,消费者知晓了真正的协调者后,会创建连向该 Broker 的 Socket 连接
      • 只有成功连入协调者,协调者才能开启正常的组协调操作,比如加入组、等待组分配方案、心跳请求处理、位移获取、位移提交等
    • 3.消费数据时。
      • 消费者会为每个要消费的分区创建与该分区领导者副本所在 Broker 连接的 TCP
      • 举个例子,假设消费者要消费 5 个分区的数据,这 5 个分区各自的领导者副本分布在 4 台 Broker 上,那么该消费者在消费时会创建与这 4 台 Broker 的 Socket 连接
  • 创建多少个 TCP 连接?
    • 消费者程序会创建 3 类 TCP 连接:
      • 1、确定协调者和获取集群元数据。
      • 2、连接协调者,令其执行组成员管理操作。
      • 3、执行实际的消息获取。
  • 何时关闭 TCP 连接?
    • 消费者关闭 Socket 也分为主动关闭和 Kafka 自动关闭
      • 主动关闭是指你显式地调用消费者 API 的方法去关闭消费者,具体方式就是手动调用 KafkaConsumer.close() 方法,或者是执行 Kill 命令,不论是 Kill -2 还是 Kill -9
      • 而 Kafka 自动关闭是由消费者端参数 connection.max.idle.ms控制的,该参数现在的默认值是 9 分钟,即如果某个 Socket 连接上连续 9 分钟都没有任何请求“过境”的话,那么消费者会强行“杀掉”这个 Socket 连接
    • 不过,和生产者有些不同的是,如果在编写消费者程序时,你使用了循环的方式来调用 poll 方法消费消息,那么上面提到的所有请求都会被定期发送到 Broker
      • 因此这些 Socket 连接上总是能保证有请求在发送,从而也就实现了“长连接”的效果
  • 小结
原文地址:https://www.cnblogs.com/minimalist/p/12965306.html