Kafka万亿级消息实战干货

当前线上集群规模已经超过了600+broker,入流量超3万亿记录/天,出流量超7万亿记录/天。在巨大的流量实战中,我们遇到了很多麻烦,这里抽了点时间梳理了一下。主要从应用层面底层原理层面开源版本功能缺陷三个方面进行了核心知识点的梳理。目前本文只是对核心知识点进行概括,并不会详细描述每个知识点的细节,后续我将抽出时间来继续整理完善细节,希望可以为大家提供一些帮助。

一、Kafka应用层面

1.版本升级;

1.1.如何滚动升级与回退;

2.数据/副本迁移;

2.1.broker间数据迁移;
2.2.broker内部磁盘间数据迁移;

3.流量限制;

3.1.生产者流量限制;
3.2.消费者流量限制;
3.3.follower副本同步leader副本流量限制;

4.运维监控告警;

4.1.硬件基础监控:

4.1.1.网络
网络入流量、网络出流量、网络丢包、网络重传、交换机
4.1.2.磁盘
磁盘write、磁盘read、磁盘ioutil、磁盘iowait、磁盘存储空间、磁盘坏盘、磁盘坏块/坏道
4.1.3.CPU
CPU空闲率/负载
4.1.4.内存
内存使用率
4.1.5.缓存命中率
PageCache缓存命中率

4.2.Kafka服务监控:

4.2.1.broker级别:
broker进程、broker出/入流量、broker连接数、broker网络空闲率、broker生产延时、broker消费延时、broker生产请求数、broker消费请求数、broker上分布leader个数、broker上分布副本个数、broker请求队列
4.2.2.topic级别:
topic副本缺失、topic出/入流量、topic消费者消费延迟记录、topic分区leader切换
4.2.3.用户级别
用户出/入流量、用户出/入流量被限制时间;
4.2.4.服务日志
对server端打印的错误日志进行监控告警;

4.3.客户端应用监控;

4.3.1.生产者客户端
维度:客户端ID、客户端IP、topic名称、集群名称、brokerIP;
指标:连接数、io等待时间、生产流量大小、生产记录数、请求次数、请求延时、发送错误/重试次数等;
4.3.2.消费者客户端
维度:客户端ID、客户端IP、topic名称、集群名称、消费组、brokerIP、topic分区
指标:连接数、io等待时间、消费流量大小、消费记录数、消费延时、topic分区消费延迟记录等

4.4.zookeeper监控;

4.4.1.zookeeper的进程监控;
4.4.2.zookeeper的leader切换;
4.4.3.zookeeper服务的错误日志监控;

5.资源隔离;

5.1.业务资源物理隔离(分资源组),不同业务互不影响;

6.集群归类

6.1.日志集群;
6.2.监控集群;
6.3.计费集群;
6.4.商业化集群;
6.5.非商业化集群;

7.扩容/缩容;

7.1.topic扩容分区;
7.2.集群节点扩容broker(新broker上线);
7.3.集群缩容(节点下线);

8.负载均衡;

8.1.开发自动负载均衡程序采集metrics指标,生成副本迁移计划,并执行迁移;
8.2.broker间负载均衡、broker内部多块磁盘间负载均衡;

9.安全认证;

9.1.生产者权限认证;
9.2.消费者权限认证;
9.3.指定迁移数据目录安全认证;

10.集群容灾;

10.1.跨机架容灾;
10.2.跨集群容灾;
10.3.跨机房容灾;

11.参数/配置优化;

11.1.服务参数优化;
11.2.生产参数优化;
11.3.消费参数优化;
11.4.服务器内核参数优化;

12.硬件层面优化;

12.1.采用SSD固态硬盘代替HDD(机械盘);
12.2.采用更大内存服务器,比如256GB及以上;
12.3.配置更高的网络带宽,比如 10Gb/s及以上;

13.业务大屏;

集群个数、节点个数、存储大小、用户个数、topic个数、分区个数、副本个数、消费组个数、生产延时、消费延时、生产流量、消费流量、数据可靠性/完整性;

14.集群管理

14.1.集群配置管理;
14.2.集群滚动重启;

15.集群治理

15.1.无生产/消费的topic从集群中清理掉;
15.2.消费延迟较高的topic分区监控告警,并让相应的消费方检查延迟较大原因及解决措施;

16.mock功能

16.1.生产mock;
16.2.消费mock;

17.集群IP、域名映射

17.1.上线broker添加域名到broker的映射;
17.2.下线broker剔除域名与broker的映射;

18.性能测试评估

18.1.根据性能测试结果评估broker节点个数及分区个数;

二、Kafka底层原理层面

1.生产者实现细节;

1.1.如何获取元数据;
1.2.添加分区后如何感知;
1.3.分区leader切换后如何感知;
1.4.数据如何存储;
1.5.如果acks被设置为-1,则如何进行回调;

2.消费者实现细节;

1.1.如何获取元数据;
1.2.添加分区后如何感知;
1.3.分区leader切换后如何感知;
1.4.添加新的消费者实例如何均衡;
1.5.如何检索消息;

3.副本迁移实现细节;

3.1.不带指定数据目录的迁移(broker间数据迁移);
3.2.带指定数据目录的迁移(broker间数据迁移及broker内部数据目录迁移);

4.topic的增、删、改、查实现细节;

5.controller的选举细节;

6.topic分区leader选举实现细节;

7.Metrics指标实现细节;

8.quota流量限制实现细节;

9.时间轮实现细节;

10.安全认证实现细节;

11.事务实现细节;

12.topic分区数据过期处理实现细节;

13.动态配置实现细节;

13.1.broker、topic、user配置动态管理;

14.topic分区isr列表变化如何处理;

14.1.isr列表收缩;
14.2.isr列表扩展;

15.日志数据存储细节;

15.1.日志目录结构;
15.2.日志内容格式;

三、kafka开源版本功能缺陷

1.副本迁移;

1.1.当需要终止迁移任务时,无法终止迁移任务;【当前我们已经完成源码改造,实现了终止迁移新特性】

1.2.只能串行迁移,不能同时提交多个迁移任务;【当前我们已经完成源码改造,实现了并发副本迁移】

1.3.当topic分区数据量巨大时,数据迁移变得漫长且对broker对io产生巨大压力,影响到来集群稳定性;【当前我们已经完成源码改造,实现了增量副本迁移】

猜你喜欢

转载自blog.csdn.net/yangyijun1990/article/details/109136424