ReZero's Utopia.

Kafka

Word count: 599Reading time: 2 min
2021/11/12 Share

Kafka

基础概念

客户端:producer,consumer
服务端:broker

主从复制类备份机制,仅主提供服务

Partitioning: topic 划分为多个 partition, 每个 partition 是一组有序的消息日志。生产者只会向一个分区发消息。每个分区有一个leader replica 和 N-1 个follower replica. 分区中包含消息,消息 offset start 0, 递增。消费者也有个消费offset,代表消费的进度位置。

Log segment: 日志采用追加写,写满一个段后会切分新段,老段会封存进行定期检查与删除。

消费者组:多个消费者实例共同组成一个组来消费一组主题,这组主题的每个分区都会被组内的一个消费实例消费。

base-concept

磁盘容量规划

每天 1 亿条 1KB 大小的消息,保存两份防止丢失且留存两周的时间,那么总的空间大小就等于 1 亿 * 1KB * 2 / 1000 / 1000 = 200GB。一般情况下 Kafka 集群除了消息数据还有其他类型的数据,比如索引数据等,故我们再为这些数据预留出 10% 的磁盘空间,因此总的存储容量就是 220GB。既然要保存两周,那么整体容量即为 220GB * 14,大约 3TB 左右。Kafka 支持数据的压缩,假设压缩比是 0.75,那么最后你需要规划的存储空间就是 0.75 * 3 = 2.25TB。

带宽利用率

超过 70% 的阈值就有网络丢包的可能性了,故 70% 的设定是一个比较合理的值,也就是说单台 Kafka 服务器千兆带宽最多也就能使用大约 700Mb 的带宽资源。不能让 Kafka 服务器常规性使用这么多资源,通常要再额外预留出 2/3 的资源,即单台服务器使用带宽 700Mb / 3 ≈ 240Mbps。需要提示的是,这里的 2/3 其实是相当保守的,你可以结合你自己机器的使用情况酌情减少此值。有了 240Mbps,我们就可以计算 1 小时内处理 1TB 数据所需的服务器数量了。根据这个目标,我们每秒需要处理 2336Mb 【10241024/36008】的数据,除以 240,约等于 10 台服务器。如果消息还需要额外复制两份,那么总的服务器台数还要乘以 3,即 30 台。

###

CATALOG
  1. 1. Kafka
    1. 1.1. 基础概念
    2. 1.2. 磁盘容量规划
    3. 1.3. 带宽利用率