搞定这8个Kafka生产级容量评估,每日10亿+请求轻松拿捏!

 

本篇文章通过场景驱动的方式来深度剖析 Kafka 生产级容量评估方案如何分析,申请和实施。

一、kafka容量评估需求场景分析

1、集群如何每天hold住10亿+请求

拿电商平台为例,kafka 集群每天需要承载10亿+请求流量数据,一天24小时,对于平台来说,晚上12点到凌晨8点这8个小时几乎没多少数据涌入的。这里我们使用「二八法则」来进行预估,也就是80%的数据(8亿)会在剩余的16个小时涌入,且8亿中的80%的数据(约6.4亿)会在这16个小时的20%时间 (约3小时)涌入。

通过上面的场景分析,可以得出如下:

QPS计算公式 = 640000000 ÷ (3 * 60 * 60) = 6万,也就是说高峰期集群需要扛住每秒6万的并发请求。

假设每条数据平均按20kb(生产端有数据汇总)来算, 那就是 1000000000 * 20kb = 18T,一般情况下我们都会设置3个副本,54T,另外 kafka 数据是有保留时间周期的,  一般情况是保留最近3天的数据,即 54T * 3 = 162T。

2、场景总结

要搞定10亿+请求,高峰期要支撑6万QPS,需要大约162T的存储空间。

二、kafka容量评估之物理机数量

1、物理机 OR 虚拟机

 一般对于Kafka,Mysql,Hadoop 等集群自建的时候,都会使用物理机来进行搭建,性能和稳定性相对虚拟机要强很多。

2、物理机数量计算

第一步中我们分析得出系统高峰期的时候要支撑6万QPS,如果公司资金和资源充足的情况下,我们一般会让高峰期的QPS控制在集群总承载QPS能力的30%左右,这样的话可以得出集群能承载的总QPS能力约为20万左右,这样系统才会是安全的。

3、场景总结

根据经验可以得出每台物理机支撑4万QPS是没有问题的,从QPS角度分析,我们要支撑10亿+请求,大约需要5台物理机,考虑到消费者请求,需要增加约1.5倍机器,即7台物理机。

三、kafka容量评估之磁盘

1、机械硬盘 OR 固态硬盘SSD

两者主要区别如下:

  • SSD就是固态硬盘,它的优点是速度快,日常的读写比机械硬盘快几十倍上百倍。缺点是单位成本高,不适合做大容量存储。

  • HDD就是机械硬盘,它的优点是单位成本低,适合做大容量存储,但速度远不如SSD。

首先SSD硬盘性能好,主要是指的随机读写能力性能好,非常适合Mysql这样的集群,而SSD的顺序读写性能跟机械硬盘的性能是差不多的。

Kafka

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Boot和Kafka实现同一个程序作为生产者和消费者是可能的。 在Spring Boot中,我们可以使用`@EnableKafka`注解启用Kafka支持,并配置Kafka的相关属性。 首先,我们需要定义一个生产者配置的Bean,配置Kafka生产者属性,例如bootstrap.servers、key.serializer等。然后,我们可以使用`KafkaTemplate`来发送消息到Kafka中。 接下来,我们需要定义一个消费者配置的Bean,配置Kafka的消费者属性,例如bootstrap.servers、group.id等。然后,我们可以使用`@KafkaListener`注解来指定消费者监听的主题,并定义消息处理方法。 在同一个程序中,我们可以创建一个或多个Kafka生产者,使用`KafkaTemplate`发送消息到Kafka中。同时,我们也可以创建一个或多个Kafka消费者,使用`@KafkaListener`注解监听对应的主题,处理接收到的消息。 可以使用以下代码示例作为参考: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.kafka.annotation.EnableKafka; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; @SpringBootApplication @EnableKafka public class KafkaApplication { @Autowired private KafkaTemplate<String, String> kafkaTemplate; public static void main(String[] args) { SpringApplication.run(KafkaApplication.class, args); } // 生产者 public void sendMessage(String message) { kafkaTemplate.send("topic", message); } // 消费者 @KafkaListener(topics = "topic") public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 可以在`main`方法中调用`sendMessage`方法发送消息,同时`@KafkaListener`注解的方法会监听对应的主题,并处理接收到的消息。 需要注意的是,同一个程序作为生产者和消费者时,需要正确配置Kafka的属性,确保生产者和消费者连接到正确的Kafka集群。此外,同步或异步处理接收到的消息也需要根据实际需求进行适当的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值