4.1.6消费消息


4.1.6消费消息

拉取器返回的记录集是消费者记录列表,在返回给客户端时,会被封装成消费者记录集(ConsumerRecords)迭代器,便于客户端直接进行迭代处理。和旧消费者使用ConsumerIterator类似,消费者记录集迭代器也实现了Iterable接口,所以可以用for循环处理每条消息。

旧API应用程序用到了消费者连接器、消息流和消费者迭代器,新API只用到了消费者对象(KafkaConsumer)、消费者记录集迭代器。还有一个不同点是:|臼API返回的消费者迭代器消息是字节数组,而新API直接返回消息的原始类型。相关代码如下:
在这里插入图片描述

旧API的消费者迭代器和拉取线程的一些内部对象有关,比如它对应了一个消息流对象,在迭代过程中要处理拉取线程放人的数据块,还要更新分区信息对象的消费偏移量。新API的消费者记录集迭代器逻辑比较简单,只是将列表转换成迭代器,和内部的对象没有关联关系,也不需要更新消费偏移盘。

如图4-23所示,新|日API采用不同的消费者线程模型。旧API的消费者存在一个拉取管理器管理了所有的拉取线程。拉取线程会不断地从服务端拉取数据,并将拉取到的数据块填充到队列中。消费者客户端应用程序订阅主题时可以设置线程数量,每个线程对应一个队列。因此如果有多个队列,客户端需要读取所有的队列,才能完整地消费分配给消费者的所有分区数据。

新API的消费者没有在内部使用多线程的拉取线程,它是一个单线程的应用程序。客户端通过循环地轮询来获取数据。消费者拉取消息通过拉取器对象完成,这个拉取器不是一个线程,只是负责把拉取请求发送给分区的主副本节点,并且会在客户端请求的回调方法中,将拉取结果存储到一个全局的成员变量。客户端要获取拉取到的结果,也是通过消费者的轮询从拉取器的全局成员变盐中获取数据。
在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页