ReZero's Utopia.

Kafka

Word count: 920Reading time: 3 min
2021/11/12 Share

Kafka

基础概念

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

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

topic 划分为多个 partition, 每个 partition 是一组有序的消息日志。
同一个 topic 的不同 partition 包含的消息是不同的
生产者只会向一个分区发消息。
每个分区有一个 leader replicaN-1follower replica.
分区中日志文件中通过 offset(start from 0) 标识消息 唯一性, 递增。消费者也有个消费 offset,代表消费的进度位置。
offset 不跨区,即保证 partition 有序但不保障 topic 有序

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

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

base-concept

典型的 Kafka 体系架构包括若干 Producer、若干 Broker 、若干 Consumer ,以及 ZooKeeper 集群
ZooKeeper Kafka 用来负责集群元数据的管理、控制器的选举 操作的 Producer 将消息发送到 Broker, Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并消 费消息。

基本配置

1
2
3
4
5
# zoo.cfg
# 其A是一个数, 代表服务器的编号,就是前面所说的 myid 文件里面的值。集群中每台服务器的编号都必须唯一,所以要保证每台服务器中的 myid 中的值不同
# B表服务器的 IP 地址 C表示服务器与集群 中的 leader 务器交换信息的端口 D 表示选举时服务器相互通信的端口。
server.A=B:C:D

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建主题,分区 副本
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic-demo --replication-factor 3 --partitions 4

# 查看主题
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic topic-demo

## 订阅消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-demo

## 发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-demo


磁盘容量规划

每天 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. 使用
    4. 1.4. 磁盘容量规划
    5. 1.5. 带宽利用率