zoukankan      html  css  js  c++  java
  • 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 连接上总是能保证有请求在发送,从而也就实现了“长连接”的效果
    • 小结
  • 相关阅读:
    4种xml解析器区别
    eclipse的快捷键(常用)
    eclipse修改项目访问前缀
    oracle创建用户
    导入安全证书到jdk
    laravel 命令行输出进度条
    sql 事务的四种隔离级别
    supervisor 通过图形界面管理
    supervisor "INFO spawnerr: unknown error making dispatchers for xxx" 错误
    linux expect 的使用
  • 原文地址:https://www.cnblogs.com/minimalist/p/12965306.html
Copyright © 2011-2022 走看看