在消息被写入分区首领之后,broker开始检查acks配置参数——如果acks被设为0或1,那么broker立即返回响应;如果acks被设为all,那么请求会被保存在一个叫做炼狱的缓冲区,直到首领发现所有跟随者副本都复制了消息,响应才会返回给客户端。
5.4.2获取请求
broker处理获取请求的方式与处理生产请求相似。客户端发送请求,想broker请求主题分区具有特定偏移量的消息。客户端可以指定broker最多从一个分区返回多少数据。这个限定非常重要,因为客户端需要为broker返回的数据分配足够的内存。如果没有这个限制,broker返回的大量数据可能耗尽客户端内存。linux 增加一个管理员用户如果请求的偏移量存在,broker将按照客户端指定的数量上限从分区读取消息,再把消息返回客户端。Kafka使用零复制技术想客户端发送消息——也就是说Kafka直接把消息发送到网络通道,不需要经过任何中间缓冲区。这种技术避免了字节复制,也不需要管理内存缓存区,从而获得更好性能。
客户端除了可以设置返回数据的上限,也可以设置下限。在主题消息流量不是很大的情况下,这样可以减少CPU和网络开销。客户端发送一个请求,broker有足够数据才把它们返回客户端。当然客户端可以设定一个超时时间,当到达时间后,即便broker没有足够数据,也会发送到消费者。
并不时保存在分区首领上的数据都能被客户端读取,大部分客户端只能读取已经被写入所有同步副本的消息,分区首领知道每个消息会被复制到哪个副本上,在消息被写入所有同步副本之前,是不会发给消费者的——尝试获取这些消息的请求会得到空的响应而不是错误。
这意味着如果broker间的消息复制变慢,那么消息到达消费者的时间也会变长,延迟时间可以通过replica.lag.time.max.ms来配置,它指定来副本在复制消息时可被允许的最大延迟时间。
之前的Kafka消费者使用zookeeper跟踪偏移量,之后决定把偏移量保存在特定的Kafka主题上。为了达到这个目的,我们不得不往协议里增加几种请求类型在:offsetCommitRequest,offsetFetchRequest和listOffsetRequest,现在应用程序调用commitOffset方法时客户端不再把偏移量写入zookeeper,而是向Kafka发送offsetCommitRequest请求。
主题的创建仍然需要通过命令行来完成,命令行工具会直接更新zookeeper里的主题列表,broker这些主题列表,在有新主题加入时,它们会收到通知。我们正在改进Kafka,增加createTopicRequest,这样客户端就可直接向broker请求创建新主题了。
),然后那天的店员说没有机箱可以也给我们换机如果是硬件的问题。
socks5:常见socks代理有socks4,socks5,不过目前基本上以socks5代理为主,它基本支持所有客户端请求协议,http,ftp,smtp等,可以具备高级匿名代理隐藏功能。
服务端需要创建service来客户端请求,然后创建一个aidl文件,将暴露给客户端的接口在aidl文件中声明,最后在service中实现这个aidl接口即可。
在网上找了这个叫服务器反推技术:具体实现的方式不一样,我用的是java作为tcp/ip服务器,flash作为客户端接收,然后flash和js通信达到可以将服务器的数据反推到html中的目的。
5.5物理存储
Kafka的基本存储单元时分区,分区无法在多个broker间在细分。
在创建主题时,Kafka首选会决定如何在broker间分配分区,我们要达到如下目标:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-92089-4.html
不是坏事