文章目录

  • 1.集群木桶效应,broker雪崩
  • 2.集群扩容无法自动负载均衡
  • 3.集群副本迁移影响集群稳定,迁移任务不可控
  • 4.异常流量打挂集群
  • 5.一个业务异常影响整个集群稳定
  • 6.pagecache污染及优化
  • 7.磁盘故障或者坏道,整个broker半死不活
  • 8.同一个消费者组消费多个topic问题
  • 9.所有请求竞争同一个阻塞请求队列
  • 10.核心业务无法实现跨集群高可用

1.集群木桶效应,broker雪崩

痛点:
当整个集群当leader和follower分布不均衡时,这可能导致流量分布不均衡。一部分节点比较空闲,一部分节点负载过高(这里当负载主要是磁盘IO与网络带宽,CPU基本上不会成为Kafka的瓶颈)。最后导致出现大量副本缺失,直至broker挂掉后,流量压力转移到另外一个broker节点,很可能这个节点也会因为负载过大而被打挂。

优化方案:
1)实现一套自动负载均衡程序,自动生成均衡计划,逐个topic进行均衡。【推荐】
2)手动切换分区leader或者进行副本迁移;【效率低,不推荐】

2.集群扩容无法自动负载均衡

痛点:
当扩容集群时,topic的分区生产消费无法落在新加入的broker节点上。这样相当于已经存在的topic读写数据无法落在新broker节点上,从而新节点无法得到充分利用。

优化方案:
1)实现一套自动负载均衡程序,自动生成均衡计划,逐个topic进行均衡。【推荐】
2)手动切换分区leader或者进行副本迁移;【效率低,不推荐】

3.集群副本迁移影响集群稳定,迁移任务不可控

痛点:
当需要迁移的分区数据量比较大时(单分区数据量超过100GB以上),这将导致迁移任务启动的新副本会从leader所在的broker节点大量拉取历史数据。这可能带来以下问题:
1)broker的磁盘IO被持续打满;
2)操作系统pagecache受到污染,导致生产消费延迟;
3)出现大量副本缺失;
4)迁移任务一旦开启便无法停止,只有让其执行失败或者成果才能结束。

优化方案:
1)改造源码,从最新偏移量开始同步数据,实现增量副本迁移;
2)增量迁移,新副本加入isr列表的时机可以根据当前分区是否有消费延迟和指定同步时间两个方面去考虑;
3)修改源码,对迁移任务添加可手动终止功能;

4.异常流量打挂集群

痛点:
当出现入流量当突增或出流量当突增时,可能造成broker节点负载过大(经常时磁盘IO被持续打满到100%)。以下情况容易造成流量突增:
1)新业务上线,数据源加入了新的大业务,生产者写入流量突增;
2)消费端程序从历史最早位置开始消费,拉去大量历史数据;
3)消费端程序停止服务一段时间后,重启追数;
4)大topic在消费端程序有新的消费者组加入,出流量突增;

优化方案:
1)根据用户维度,对各集群用户的出入流量进行限制;保证单个broker节点上所有用户的出入流量之和在broker的处理能力范围内;

5.一个业务异常影响整个集群稳定

痛点:
当某个业务的部分topic异常时,可能会影响到集群上的其他业务。

优化方案:
根据不同业务线,以资源组为单位对集群进行物理隔离,让各业务线的topic都是分布在自己的资源组内。不受其他业务线影响

6.pagecache污染及优化

痛点:
1)大量拉去历史数据,导致pagecache污染,造成生产消费延迟;

优化方案:
1)对pagecache参数进行调优;文章地址:https://blog.csdn.net/yangyijun1990/article/details/105341785
2)修改源码,对kafka的cache进行改造。自定义一套cache,专门用来做消费cache。保证副本同步和拉取历史数据不会污染最近生产的数据。

7.磁盘故障或者坏道,整个broker半死不活

痛点:
1)当整块磁盘故障或出现磁盘坏道情况,整个broker部分分区可以读写,部分分区无法读写;broker进程不会主动推出,坏道所影响的分区消费一直被卡住,同时造成数据丢失。

优化方案:
1)当整块磁盘故障或者坏道时,消费者消费会在服务端抛出一些特定关键字符串当异常信息,用程序扫描异常信息,检测到后,把对应的磁盘从 log.dirs 中剔除;

8.同一个消费者组消费多个topic问题

痛点:
1)当同一个消费者组消费多个topic,无法回收消费者组下某个topic的读权限,只能对整个组下面的topic进行读权限回收;
2)消费组内多个topic间经常出现join操作,导致topic分区重新分配,影响整个组下面topic消费;

优化方案:
1)限定一个组只能消费一个topic;

9.所有请求竞争同一个阻塞请求队列

痛点:
1)kafka中所有请求,包括元数据请求及生产消费请求,全部使用了同一个请求队列。当集群达到一定规模后,出现请求队列被用完,不同类型的请求相互影响,相同类型的请求也会相互影响,被阻塞。

优化方案:
1)根据不同的请求类型,对请求队列进行拆分;这里主要是分为元数据类请求、生产请求、消费请求三类;

10.核心业务无法实现跨集群高可用

核心业务采用多链路来实现跨集群高可用。

Kafka常见痛点及优化方案相关推荐

  1. 常见的MySQL优化方案1

    前言:我们先了解一下sql性能优化 性能优化(Optimize)指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段.而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并 ...

  2. 基于Vue-SSR优化方案归纳总结

    Vue-SSR相信大家都不陌生,与传统 SPA 相比,服务器端渲染 (SSR) 能够具备更好的SEO,方便搜索引擎爬虫抓取工具可以直接查看完全渲染的页面,除此之外,SSR能够在更短的时间内渲染出页面内 ...

  3. 史上最全Android性能优化方案解析

    Android中的性能优分为以下几个方面: 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 -- 一.布局优化 布局优化的本质就是减少View的层级.常见的布局优化方案如下: 在Line ...

  4. MySQL索引(二)索引优化方案有哪些

    在上一篇文章中,我们介绍了MySQL中常见的索引类型以及每种索引的各自特点,那么这篇文章带你来与我一起看一下聚集索引与二级索引的关系,最后在附上常见的索引优化方案.首先我们还是看一下聚集索引和二级索引 ...

  5. mysql 交集_面试官:来说说MySQL的常见优化方案……

    性能优化(Optimize)是在保证系统正确性的前提下,能够更快速响应请求的一种手段. 有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并发请求之后,会导致严重的后果,轻则造成服务 ...

  6. Android 内存优化——常见内存泄露及优化方案

    如果一个无用对象(不需要再使用的对象)仍然被其他对象持有引用,造成该对象无法被系统回 收,以致该对象在堆中所占用的内存单元无法被释放而造成内存空间浪费,这中情况就是内存泄 露. 在 Android 开 ...

  7. 数据库sql常见优化方案

    为什么要优化:      随着实际项目的启动,数据库经过一段时间的运行,最初的数据库设置,会与实际数据库运行性能 会有一些差异,这时我们就需要做一个优化调整. 数据库优化这个课题较大,可分为四大类: ...

  8. 于飞SEO:常见的网站seo优化方案 你会写了吗?

    企业创建企业网站是为了增加品牌曝光率,为了让企业有一个好的形象,为了提升产品的口碑,可你没有发现一个问题,有的企业做网站做得很好,有的企业做网站确做得很烂,这到底是什么结果造成的,其实原因很简单,没有 ...

  9. 常见的canvas优化——模糊问题、旋转效果

    canvas常见优化方案--模糊问题.旋转效果.离屏.自定义图片尺寸 实践demo--"canvas离屏.旋转效果实践--旋转的雪花" 2017-12-18 16:27:35更新关 ...

最新文章

  1. 事件绑定、事件监听、事件委托
  2. “android:process“---由日志引发的大灾难
  3. 搜索重复代码_LeetCode专题——详解搜索算法中的搜索策略和剪枝
  4. 基于生成对抗网络的医学数据域适应研究
  5. Messes in Reading Source Coding of SSD
  6. 祝各位MM们节日快乐!
  7. SpringCloud项目接入Nacos服务治理
  8. VS2015 无法打开包括文件string.h等
  9. Hive行转列的应用之计算公司累加收入
  10. 寒假2019培训:跳楼机(洛谷P3403)
  11. 利用arcscene将shape文件拉伸后三维展示
  12. 说故我在-跟老友记练口语
  13. ZSTU OJ-4454 招兵买马
  14. 龙之战神微信登录服务器,龙之战神微信登录版
  15. 解决电脑扩展屏幕模糊的小技巧
  16. 几种负荷预测方法及其应用
  17. nginx日志格式及自定义日志配置
  18. php外文参考文献翻译,双语参考文献输出功能
  19. 手把手教你搭建Spring Boot项目
  20. 莫烦Python代码实践(一)——Q-Learning算法工程化解析

热门文章

  1. 项目发布Debug和Release版的区别
  2. Android 实现瀑布流的两种思路
  3. Educational Codeforces Round 15 套题
  4. 一个数组中的元素头尾两端依次对调
  5. jQueyr源码分析学习笔记(四)
  6. OpenCV3学习(8.2)直方图相似度比较compareHist函数与EMD距离
  7. JAVA设置流中当前位置_Java程序来标记此输入流中的当前位置
  8. function好的写法
  9. html网页主题结构,常用html元素总结包括基本结构、文档类型、头部、主体等等...
  10. 奇怪的顾客(C++)