本篇是<关于Kafka producer管理TCP连接的讨论>的续篇,主要讨论Kafka java consumer是如何管理TCP连接.实际上,这两篇大部分的内容是相同的,即consumer也是把TCP连接的管理交由底层的Selector类(org.apache.kafka.common.network)来维护.我们依然以“何时创建/创建多少/何时关闭/潜在问题/总结”的顺序来讨论.和上一篇一样,本文将无差别地混用名词TCP和Socket. 一.何时创建TCP连接 首先明确的是,在构建Kaf…
在Kafka中,TCP连接的管理交由底层的Selector类(org.apache.kafka.common.network)来维护.Selector类定义了很多数据结构,其中最核心的当属java.nio.channels.Selector实例,故所有的IO事件实际上是使用Java的Selector来完成的.本文我们探讨一下producer与Kafka集群进行交互时TCP连接的管理与维护. 一.何时创建TCP连接 Producer端在创建KafkaProducer实例时就会创建与broker的T…
Kafka提供了两种Consumer API,分别是:High Level Consumer API 和 Lower Level Consumer API(Simple Consumer API) High Level Consumer API:高度抽象的Kafka消费者API:将底层具体获取数据.更新offset.设置偏移量等操作屏蔽掉,直接将操作数据流的处理工作提供给编写程序的人员.优点是:操作简单:缺点:可操作性太差,无法按照自己的业务场景选择处理方式.(入口类:ConsumerConne…
Kafka提供了两种Consumer API,分别是:High Level Consumer API 和 Lower Level Consumer API(Simple Consumer API) High Level Consumer API:高度抽象的Kafka消费者API:将底层具体获取数据.更新offset.设置偏移量等操作屏蔽掉,直接将操作数据流的处理工作提供给编写程序的人员.优点是:操作简单:缺点:可操作性太差,无法按照自己的业务场景选择处理方式.(入口类:ConsumerConne…
前段时间在Kafka QQ群中有人问及此事——关于Java consumer如何动态修改topic订阅的问题.仔细一想才发现这的确是个好问题,因为如果简单地在另一个线程中直接持有consumer实例然后调用subscribe进行修改,consumer端必然会抛出异常ConcurrentModificationException:KafkaConsumer is not safe for multi-threaded access 和KafkaProducer不同的是,KafkaConsumer不…
初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发生了什么,所以做了一番实验,验证socket tcp连接在调用close.被GC回收.程序运行完毕退出.程序进程被杀掉时,tcp会产生什么行为.得出了一些结论,记录于此同时分享给大家. 先写出得到的结论: java程序运行完毕退出和被杀进程时,socket tcp连接会被关闭.而且是通过发送RST方…
错误信息 19/01/15 19:36:40 WARN consumer.ConsumerConfig: The configuration max.poll.records = 1 was supplied but isn't a known config. 19/01/15 19:36:40 INFO utils.AppInfoParser: Kafka version : 0.9.0-kafka-2.0.2 19/01/15 19:36:40 INFO utils.AppInfoParse…
在最近的求职面试过程中,关于"建立TCP连接的三次握手"不止一次被问到了,虽然我以前用同样的问题面试过别人,但感觉还是不能给面试官一个很清晰的回答.本文算是对整个TCP连接管理做一个比较系统的梳理. 1. TCP报文段结构(TCP Segment Structure)(i.e. TCP Header) source port: 源端口,占16位. dest port: 目标端口,占16位. sequence number: 序列号,占32位.该字段指定了TCP分组在数据流中的位置,在数…
        经过前面对TCP连接管理的介绍,我们本小节通过TCP连接管理的状态机来总结一下看看TCP连接的状态变化 一.TCP状态机整体状态转换图(截取自第二版TCPIP详解) 二.TCP连接建立和终止过程中状态迁移总结 下面我们总结一下前面介绍过的连接建立方式和终止过程中client端和server端的状态切换 1.三次握手 client:CLOSED -> SYN_SENT -> ESTABLISHED server:CLOSED -> LISTEN -> SYN_RCVD…
一.TCP连接的ISN         之前我们说过初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(different instantiations/incarnations of the same connection)的数据包混淆. 同一个连接的不同实例是怎么回事呢?之前我们说过(源IP.源端口号.目的地址.目的端口号)这个四元组唯一标识一个TCP连接,当一个TCP连接在经历四次挥手关闭时,假如有…