kafka常用api

KafkaClient是Kafka producer和consumer与broker通信的关键接口,其内部使用NetworkClient实现。isReady和ready方法检查节点是否可用于发送请求,connectionDelay提供基于连接状态的等待时间。send方法将请求放入发送队列,poll处理读写操作,close关闭指定节点连接。leastLoadedNode选择负载最低的节点,inFlightRequestCount跟踪未响应请求。RequestHandler负责构造请求头部,包含ApiKey、ApiVersion等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


KafkaClient,是producer和consumer与broker通信的接口,它的设计就建立在上边的协议的基础上。这个类包括了与连接状态和请求-响应状态有关的方法。producer和consumer实际使用的它的实现类是NetworkClient。以下方法的作用结合了KafkaClient和NetworkClient的注释,但以NetworkClient的实现为标准。

 

public boolean isReady(Node node, long now) 查看某个结点是否准备好发送新请求了。由于是给client用的,因此这里的“node"就是broker

 

public boolean ready(Node node, long now)是到指定node的连接已经被创建好并且可以发送请求。如果连接没有创建,就创建到这个node的连接。

 

public long connectionDelay(Node, long now) 基于连接状态,返回需要等待的时间。连接的状态有三种:disconnected, connecting, connected.  如果是disconnected状态,就返回reconnect的backoff time。当connecting或者connected,就返回Long.MAX_VALUE,因为此时需要等待别的事件发生(比如连接成功,或者收到响应)

 

public long connectionFailed(Node node)  查看到这个node的连接是否失败。

 

public void send(ClientRequest request, long now) 把这个request放入发送队列。如果request是要发给还没有连接好的node的,那么就会抛出IllegalStateException异常, 这是一个运行时异常。

 

public List<ClientResponse> poll(long timeout, long now) 对于socket进行读写操作。

 

public void close(String nodeId) 关闭到指定node的连接

 

public Node leastLoadedNode(long now) 选择有最少的未发送请求的node,要求这些node至少是可以连接的。这个方法会优先选择有可用的连接的节点,但是如果所有的已连接的节点都在使用,它就会选择还没有建立连接的节点。这个方法绝对不会选择忆经断开连接的节点或者正在reconnect backoff阶段的连接。

 

public int inFlightRequestCount() 所有已发送但还没收到响应的请求的总数

public int inFlightRequestCount(String nodeId) 对于某个特定node的in-flight request总数

 

public RequestHandler nextRequestHanlder(ApiKeys key) 为某种请求构造它的请求头。按照Kafka Protoocl, request包括以下部分:

RequestMessage => ApiKey ApiVersion CorrelationId ClientId RequestMessage
   ApiKey => int16
   ApiVersion => int16
   CorrelationId => int32
   ClientId => string
   RequestMessage => MetadataRequest | ProduceRequest | FetchRequest | OffsetRequest | OffsetCommitRequest | OffsetFetchRequest

而这个方法构造了ApiKey, ApiVersion, CoorelationId和ClientId,作为请求的头部,request handler在源码里有对应类org.apache.kafka.common.requests.RequestHandler。

ApiKey表示请求的种类, 如produce request, fetch request, metadata request等。

puclic RequestHandler nextRequestHandler(ApiKey key, short version)  构造请求的头部,使用特定版本号。

public void wakeup() 如果这个client正在IO阻塞状态,就唤醒它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值