Java面试题之:Kafka里的生产者与消费者设计

2022/2/22 11:23:57

本文主要是介绍Java面试题之:Kafka里的生产者与消费者设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java面试题之:Kafka里的生产者与消费者设计

  • 一、负载均衡(partition 会均衡分布到不同 broker 上)
  • 二、批量发送
  • 三、压缩(GZIP 或 Snappy)
  • 四、消费者设计

一、负载均衡(partition 会均衡分布到不同 broker 上)

  由于消息 topic 由多个 partition 组成,且 partition 会均衡分布到不同 broker 上,因此,为了有效利用 broker 集群的性能,提高消息的吞吐量,producer 可以通过随机或者 hash 等方式,将消息平均发送到多个 partition 上,以实现负载均衡。
在这里插入图片描述

二、批量发送

  批量发送是提高消息吞吐量重要的方式,Producer 端可以在内存中合并多条消息后,以一次请求的方式发送了批量的消息给 broker,从而大大减少 broker 存储消息的 IO 操作次数。但也一定程度上影响了消息的实时性,相当于以时延代价,换取更好的吞吐量。

三、压缩(GZIP 或 Snappy)

  Producer 端可以通过 GZIP 或 Snappy 格式对消息集合进行压缩。Producer 端进行压缩之后,在Consumer 端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传输的压力,在对大数据处理上,瓶颈往往体现在网络上而不是 CPU(压缩和解压会耗掉部分 CPU 资源)。

四、消费者设计

在这里插入图片描述
  同一 Consumer Group 中的多个 Consumer 实例,不同时消费同一个 partition,等效于队列模式。partition 内消息是有序的,Consumer 通过 pull 方式消费消息。Kafka 不删除已消费的消息对于 partition,顺序读写磁盘数据,以时间复杂度 O(1)方式提供消息持久化能力。



这篇关于Java面试题之:Kafka里的生产者与消费者设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程