Kafka
基础概念
客户端:producer,consumer
服务端:broker
主从复制类备份机制,仅主提供服务
topic
划分为多个 partition
, 每个 partition
是一组有序的消息日志。
同一个 topic
的不同 partition
包含的消息是不同的
生产者只会向一个分区发消息。
每个分区有一个 leader replica
和 N-1
个 follower replica
.
分区中日志文件中通过 offset(start from 0)
标识消息 唯一性, 递增。消费者也有个消费 offset
,代表消费的进度位置。offset
不跨区,即保证 partition
有序但不保障 topic
有序
Log segment: 日志采用追加写,写满一个段后会切分新段,老段会封存进行定期检查与删除。
消费者组:多个消费者实例共同组成一个组来消费一组主题,这组主题的每个分区都会被组内的一个消费实例消费。
典型的 Kafka 体系架构包括若干 Producer、若干 Broker 、若干 Consumer ,以及 ZooKeeper 集群
ZooKeeper Kafka 用来负责集群元数据的管理、控制器的选举 操作的 Producer 将消息发送到 Broker, Broker 负责将收到的消息存储到磁盘中,而 Consumer 负责从 Broker 订阅并消 费消息。
基本配置
1 | zoo.cfg |
使用
1 | # 创建主题,分区 副本 |
磁盘容量规划
每天 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 台。
###