首页 > 其他分享 >kafka分区与消费者配置

kafka分区与消费者配置

时间:2023-10-22 11:33:07浏览次数:24  
标签:消费者 分区 Kafka 线程 消息 数据量 kafka

kafka分区与消费者配置

工作当中如何计算分区与消费者数量,如何最大化利用资源,防止不必要的浪费,本文将带你计算

1.基本概念回顾

Kafka是一个分布式流处理平台,具有高吞吐量、可扩展性和容错性。以下是一些Kafka的基本概念:

  • 消息:Kafka是一个消息传递系统,它通过生产者将消息发布到主题(topic),然后通过消费者从主题订阅并消费消息。
  • 主题(Topic):主题是消息的分类或者流的名称。生产者将消息发布到特定的主题,而消费者可以订阅一个或多个主题来消费消息。
  • 分区(Partition):每个主题可以分成一个或多个分区。分区是消息的有序序列,每个消息都有一个唯一的偏移量(offset)。分区使得Kafka可以在多个服务器上并行处理和存储消息。
  • 生产者(Producer):生产者负责将消息发布到Kafka主题。生产者将消息发送到特定的主题和分区,或者通过Kafka的分区器自动选择分区。
  • 消费者(Consumer):消费者订阅一个或多个主题,并从分区中拉取消息进行消费。消费者可以以不同的消费者组(Consumer Group)的形式进行组织,每个消费者组可以有一个或多个消费者。
  • 消费者组(Consumer Group):消费者组是一组具有相同消费者组ID的消费者的集合。每个分区只能由一个消费者组中的一个消费者进行消费,这样可以实现负载均衡和并行处理。
  • 偏移量(Offset):偏移量是消息在分区中的唯一标识符,用于跟踪消费者在分区中的消费位置。消费者可以控制自己的偏移量,并决定从哪个偏移量开始消费消息。
  • Broker:Kafka集群中的每个服务器节点称为Broker。每个Broker负责处理消息的存储和复制,以及与生产者和消费者进行通信。

2. 计算方式

  1. 数据量预估(秒/分)

    比如物联网数据告警场景下: 我们有2000台设备,单个设备数据采集点个数: 100个,数据上传频率为1分钟上传一次,配置了告警的设备约占总数量的30%

    由此可得出:

    ​ 1分钟数据量: 2000 * 100 = 200000

    ​ 1秒钟数据量: (1分钟数据量) (200000 * 0.3 (30%的数据) ) / 60s = 1000

  2. 单条数据在业务处理中耗时 ? 单条数据处理耗时: 50ms ,一个线程1秒钟处理20个

  3. 目前Kafka分配了多少个分区 ? 分区数: 32 需要确保每个消费者组中的消费者数量不超过32个

  4. 消费者数量(服务器数量) 4台

每个实例并行度:spring.kafka.listener.concurrency 配置计算方式为: 分区数/实例数 = 32 / 4 = 8 (建议不要超过8),超过8可能会造成线程闲置,也就是说消费组内每个实例只负责8个分区的数据.
每秒可消费数据量: 4台实例 总处理线程为32个,每1秒钟可处理 32 * (1000ms / (单个数据处理耗时)50ms) = 640个
1000 - 640 , 明显处理不过来,会堆积数据, 我们需要放入阻塞队列结合线程池进行异步消费

每秒处理1000个数据,而单个线程每秒可以处理20个数据。为了合理规划阻塞队列大小和线程池数量,可以考虑以下方案:

  1. 阻塞队列大小:由于单个线程每秒可以处理20个数据,可以设置一个容量较小的阻塞队列来缓存待处理的数据。这样可以确保线程池中的线程不会因为队列满而阻塞。
    例如,可以设置阻塞队列的大小为50以上,以便缓存一定数量的待处理数据。
  2. 线程池数量:为了处理每秒1000个数据,需要将线程池的线程数量设置为适当的值。可以根据以下公式计算线程池的大小:
    线程池大小 = 数据量每秒 / 单个线程每秒处理的数据量
    线程池大小 = 1000 / 20 = 50
    由于线程池的大小通常需要为整数,可以将线程池大小设置为50,以确保有足够的线程来处理数据。

标签:消费者,分区,Kafka,线程,消息,数据量,kafka
From: https://www.cnblogs.com/lifajia/p/17780160.html

相关文章

  • linux 磁盘分区与格式化
    一、基本分区管理1.1、linux磁盘表示方法介绍硬盘命名方式OSIDE(并口)SATA(串口)SCSICentOS6/dev/hda/dev/sda/dev/sdaCentOS7/dev/sda/dev/sda/dev/sdaCentOS8/dev/sda/dev/sda/dev/sda磁盘设备的命名/dev/sda2s=硬件接口类型(sata/scsi),d=dis......
  • kafka介绍
    Kafka名字的由来kafka的架构师jaykreps对于kafka的名称由来是这样讲的,由于jaykreps非常喜欢franzkafka,并且觉得kafka这个名字很酷,因此取了个和消息传递系统完全不相干的名称kafka,该名字并没有特别的含义。Kafka的诞生kafka的诞生,是为了解决linkedin的数据管道问题,起初linkedin......
  • kafka常用命令
    kafka文件所在位置:cd/UTMGMAPL/upkafka_1.2.11-1.0/bin创建一个模拟生产者./kafka-console-producer.sh--broker-list146.33.240.13:9092--topictopic_tyq_1创建一个模拟消费者./kafka-con......
  • 使用Grafana + jmx 监控 kafka3.5 的过程
    使用Grafana+jmx监控kafka3.5的过程摘要周五一边进行数据库监控,同时想着部署一套监控系统.能够监控一下kafka等中间件结果不想自己遇到了很多坑.下午有同事语音告诉自己一些排查问题的方式与方法.自己又多花了半个小时才将数据捞出来.感觉自己对很多工具的使用还......
  • esp32 factory+双OTA分区
    #Name,Type,SubType,Offset,Size,Flags#Note:ifyouhaveincreasedthebootloadersize,makesuretoupdatetheoffsetstoavoidoverlap,,,,nvs,data,nvs,0x4000,otadata,data,ota,0x4000,phy_init,data,phy,0x1000,factory,......
  • Python-操作kerberos验证的kafka
    本笔记为python操作kerberos认证的kafka的操作方法,此仅记录作为使用者,连接客户提供的kafka并进行操作的流程。1、依赖安装:python相关依赖库:pip3installkafka-pythonpip3installgssapi系统(镜像):需要安装kerberos的客户端进行验证对于mac:brewinstallkrb5对于Debian或Ub......
  • kafka介绍
    官网:https://kafka.apache.org/Kafka是一个分布式事件流平台1介绍核心特性:高吞吐量、弹性、持久化存储、高可用事件流类似人类的中枢神经系统。越来越多的业务被软件实现和自动化,在此种情况下软件的用户还是软件。技术上讲,事件流就是实时的从事件源(数据库,传感器,移动设备,......
  • 操作系统之分区存储组织+页式存储组织
    1、分区存储例题展示2、分区存储例题问题解决由相关知识可知,在已知该题采用可变分区进行内存分配存储管理的情况下,我们共有四种算法可以选择:1、首次适应算法--空闲分区以地址递增的次序进行连接,即从上至下按照原来次序排列,然后将作业4放入其中即可故可知,作业4应被放入到首位......
  • zokeeper和kafka关系
    在部署Kafka时,有必要同时部署ZooKeeper是因为Kafka使用ZooKeeper来管理和协调其集群的状态和配置信息。ZooKeeper是一个分布式协调服务,在Kafka中被用作集群协调器。Kafka集群中的每个节点都会与ZooKeeper进行通信,以共享元数据信息、协调leader选举、检测节点故障......
  • Kafka 消费者组
    一个分区对不同消费组是共享的,对同一个消费组里的消费者是互斥的;    参考文章【1】https://cloud.tencent.com/developer/article/1540509......