【发布时间】:2019-08-07 14:08:47
【问题描述】:
java KafkaProducer 是否打开任何管道或套接字来连接到 kafka? 如果 kafka producer 对象无法连接到 kafka 会发生什么,它会关闭这些管道和套接字吗?
【问题讨论】:
标签: java apache-kafka kafka-producer-api
java KafkaProducer 是否打开任何管道或套接字来连接到 kafka? 如果 kafka producer 对象无法连接到 kafka 会发生什么,它会关闭这些管道和套接字吗?
【问题讨论】:
标签: java apache-kafka kafka-producer-api
每个KafkaProducer 都必须在本地打开 TCP 套接字以尝试连接到它配置的 Kafka 服务器。它需要在实例化时执行此操作,因为 Kafka 将从服务器获取元数据(哪些主题可用,哪些是每个分区的领导者,是否压缩数据等),所以只要有一个 @ 987654322@ 请求。假设 Kafka 服务器已启动且可访问,这些服务器上将有远程 TCP 套接字接受连接,并且在握手过程之后,它们将在双方都处于 ESTABLISHED 状态。根据 Kafka 版本和生产者的类型,还会有其他 TCP 连接请求被发送到 zookeeper 服务,甚至可以选择发送到模式注册服务器。
如果 Kafka/Zookeeper/其他服务器不可用,无论出于何种原因,它仍然需要在本地打开这些 TCP 套接字来发起请求,但它们永远不会进入 ESTABLISHED 状态。假设有一个重试循环,套接字可能会被重用或建立新的套接字,直到连接建立或连接请求被取消。
因此,为了更直接地回答您的问题,假设如果 KafkaProducer 无法与 Kafka 对话,则取消连接请求,是的,它应该自行清理并关闭它打开的所有套接字。据我所知,Kafka 客户端从不使用 Unix 管道进行通信,到达 Kafka 服务器以生产或消费数据的唯一方法是通过 TCP 连接。
【讨论】: