hyperxu

一个专注于运维领域的个人技术博客


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 公益404

  • 搜索

一次CPU sys上涨引发对kafka PageCache的思考

发表于 2020-10-12 | 分类于 kafka | 阅读次数

1.CPU sys 上涨背景

配置 机型 A 机型 B
CPU 48C 48C
MEM 8*32G 12*16G
DATA DISK 12*960G SSD 12*4T SSD

线上某个kafka集群由于种种原因,从 24 * 机型 A 置换迁移为 12 * 机型 B。从集群总资源维度看,排除其他客观因素,置换后,CPU总核数少了一半,使用率上升其实也是预期之内的。事实上置换后,集群CPU使用率确实也由原有的 20%提升至 40%,上升了约 1 倍多。但置换后,cpu sys使用率均值约达到了 12%,较为抢眼,系统相关服务却并无异常,令人有些困惑。

阅读全文 »

kafka消费组及重平衡的影响

发表于 2020-06-14 | 分类于 kafka | 阅读次数

消费组应该算是kafka中一个比较有特色的设计模式了,而他的重平衡机制也是我们在实际生产使用中,无法避免的一个问题。

消费组

Consumer Group为kafka提供了可扩展、高容错特性的消费者机制。简单介绍下,大致有以下特点:

  • 一个Consumer Group内可以有多个Consumer实例,该实例可以是一个进程,也可以是进程下的多线程
  • 每个Consumer Group有一个唯一标识的Group ID
  • 不同Consumer Group之间相互独立,互不影响
  • Consumer Group内实例,与订阅的topic分区关系是一对一,或一对多的关系,Consumer Group会通过Coordinator尽量保持公平分配
阅读全文 »

kafka生产者的幂等和事务处理

发表于 2020-05-06 | 分类于 kafka | 阅读次数

之前和大家聊过kafka是如何保证消息不丢失的,今天再讲讲在不丢消息的同时,如何实现精确一次处理的语义实现。

消息组件对消息的可靠性保障,常见的模式有3种:

  • 最多一次(at most once):消息可能会丢失,但不会重复
  • 至少一次(at least once):消息不会丢失,但有可能重复
  • 精确一次(exactly once):消息不会丢失,且不会重复,精准一次发送

kafka默认情况下,提供的是至少一次的可靠性保障。即broker保障已提交的消息的发送,但是遇上某些意外情况,如:网络抖动,超时等问题,导致Producer没有收到broker返回的数据ack,则Producer会继续重试发送消息,从而导致消息重复发送。
相应的,如果我们禁止Producer的失败重试发送功能,消息要么写入成功,要么写入失败,但绝不会重复发送。这样就是最多一次的消息保障模式。
但对于消息组件,排除特殊业务场景,我们追求的一定是精确一次的消息保障模式。kafka通过幂等性(Idempotence)和事务(Transaction)的机制,提供了这种精确的消息保障。

阅读全文 »

kafka是如何保证消息不丢失的

发表于 2020-01-16 | 分类于 kafka | 阅读次数

今天和大家聊一下,kafka对于消息的可靠性保证。作为消息引擎组件,保证消息不丢失,是非常重要的。

那么kafka是如何保证消息不丢失的呢?

前提条件

任何消息组件不丢数据都是在特定场景下一定条件的,kafka要保证消息不丢,有两个核心条件。

第一,必须是已提交的消息,即committed message。kafka对于committed message的定义是,生产者提交消息到broker,并等到多个broker确认并返回给生产者已提交的确认信息。而这多个broker是由我们自己来定义的,可以选择只要有一个broker成功保存该消息就算是已提交,也可以是令所有broker都成功保存该消息才算是已提交。不论哪种情况,kafka只对已提交的消息做持久化保证。

第二,也就是最基本的条件,虽然kafka集群是分布式的,但也必须保证有足够broker正常工作,才能对消息做持久化做保证。也就是说 kafka不丢消息是有前提条件的,假如你的消息保存在 N 个kafka broker上,那么这个前提条件就是这 N 个broker中至少有 1 个存活。只要这个条件成立,kafka就能保证你的这条消息永远不会丢失。

阅读全文 »

kafka的发行版选择

发表于 2020-01-15 | 分类于 kafka | 阅读次数

今天继续和大家聊一下,kafka的各种发行版。kafka历经数年的发展,从最初纯粹的消息引擎,到近几年开始在流处理平台生态圈发力,衍生出了各种不同特性的版本。

你了解几种kafka

kafka的确有好几种,这里我不是指他的版本,是指存在多个组织或公司发布不同特性的kafka。你应该听说过Linux发行版,比如我们熟知的CentOS、RedHat、Ubuntu等,它们都是Linux系统,其实就是因为它们是不同公司发布的Linux系统,即不同的发行版。kafka也同样有多个发行版。

Apache Kafka

Apache Kafka是最“正统”的kafka,也应该是你最熟悉的发行版了。自kafka开源之初,它便在Apache基金会孵化并最终毕业成为顶级项目,也被称为社区版kafka。重要的是,它是后面其他所有发行版的基础。也就是说,后面提到的其他发行版,要么是原封不动地继承了Apache Kafka,要么是在此之上扩展了新功能,总之Apache Kafka是我们学习和使用kafka的基础。

阅读全文 »
12…7
hyperxu

hyperxu

33 日志
9 分类
18 标签
RSS
GitHub Facebook 知乎
© 2025 hyperxu | 浙ICP备15043518号-3
由 Hexo 强力驱动
主题 - NexT.Mist