小白学习Kafka(二):主题策略

分区

Kafka 的消息组织方 式实际上是三级结构:主题 - 分区 - 消息

问题一:为什么 Kafka 要做这样的设计?为什么使用分区的概念而不是直接使用多个主题呢?

  1. 分区的目的是:提供负载均衡,实现系统的高伸缩性【Scalability】
  2. 每条消息 只会 保存在某一个分区中。
  3. 不同的分区可以放在不同机器上;
  4. 数据的读写都是基于 分区 这个粒度;

生产者 分区策略

分区策略是决 定生产者将消息发送到哪个分区的算法

轮询策略

Round-robin 策略,即顺序分配,kafka默认分区策略。

随机策略

Randomness 策略, 随机的将消息放置到任意一个分区上。

按消息键保序策略

根据业务指定合适的key进行分区。

生产者 压缩

Producer 发送压缩消 息到 Broker 后,Broker 照单全收并原样保存起来。当 Consumer 程序请求这部分消息 时,Broker 依然原样发送出去,当消息到达 Consumer 端后,由 Consumer 自行解压缩 还原成之前的消息。

Producer 端压缩、Broker 端保持、Consumer 端解压缩。

问题一:Producer、Broker压缩算法不一致

  1. Producer压缩一遍
  2. Broker解压,再压缩一遍。

但如果配置一致,则broker保持就好了。

问题二:版本不同,Broker端发生消息格式转化

消息格式转换主要是为了兼容老版本的消费者程序

  1. Broker解压,再压缩一遍, 从而支持老版本
  2. 丧失Zero Copy的特性,

Zero Copy”就是“零拷贝

当数据在磁盘和网 络进行传输时避免昂贵的内核态数据拷贝,从而实现快速的数据传输

压缩算法

压缩算法的指标

  1. 压缩比,原先占 100 份空 间的东西经压缩之后变成了占 20 份空间,那么压缩比就是 5,显然压缩比越高越好
  2. 压缩 / 解压缩吞吐量,比如每秒能压缩或解压缩多少 MB 的数据。同样地,吞 吐量也是越高越好。

在 Kafka 2.1.0 版本之前,Kafka 支持 3 种压缩算法:GZIP、Snappy 和 LZ4。从 2.1.0 开 始,Kafka 正式支持 Zstandard 算法(简写为 zstd)。它是 Facebook 开源的一个压缩算 法,能够提供超高的压缩比(compression ratio)。

最佳实践

CPU允许的情况下,开启压缩zstd,进而也可以节省带宽。

避免消息丢失

如何配置 Kafka 无消息丢失?

对一个问题的回答,先要确认问题是什么,概念的边界

Kafka 的世界里什么 才算是消息丢失,或者说 Kafka 在什么情况下能保证消息不丢失。这点非常关键,因为很多时候我们容易混淆责任的边界,如果搞不清楚事情由谁负责,自然也就不知道由谁来出解决方案了。

Kafka 只对“已提交”的消息(committed message)做有限度的持久化 保证。

  1. 已提交:只有broker确认收到才算是已提交;
  2. 有限度:凡事有例外,如果broker全部出现问题等。

生产者

问题: 生产者发送了消息,但是Kafka没有收到

回答问题可以: 概念+原因,概念是为了做铺垫,让原因更直白

  1. Kafka Producer 是异步发送消息的,也就是说如果你调用的是 producer.send(msg) 这个 API,那么它通常会立即返回,但此时你不能认为消息发送已成功完成。。 “fire and forget”,翻译一下就是“发射后不管“;
  2. 造成丢失的原因不限于:网络抖动、格式不符合broker<消息过大>等;
  3. 采用 回调+重试的方式,producer.send(msg, callback)

消费者

问题:消费者程序丢失数据

  1. 问题定位:消费者要消费的数据不见了。
  2. 涉及的概念:Consumer 程序有 个“位移”的概念,表示的是这个 Consumer 当前消费到的 Topic 分区的位置。

位移可以类比读书的书签,正常来说,你这次读到100页,下次继续读完全没有问题,问题是:你本计划读到100页,就把书签放到100的位置,实际上读到90页就跑出去完了,下次直接从100页开始,其中就少读了10页

解决的方法类似与生产者,维持先消费消息(阅读),再更新位移(书签)的顺序

最佳实践

Producer参数

  1. 使用 producer.send(msg, callback)。
  2. 设置 acks = all。表明所有副本 Broker 都要接收到消息,该消息才算是“已提交”。 这是最高等级的“已提交”定义。可能对某些业务有点浪费
  3. retries 为一个较大的值。重试次数;

Broker 端的参数

  1. unclean.leader.election.enable = false: 控制的是哪 些 Broker 有资格竞选分区的 Leader。如果一个 Broker 落后原先的 Leader 太多,那么 它一旦成为新的 Leader,必然会造成消息的丢失。故一般都要将该参数设置成 false, 即不允许这种情况的发生。
  2. replication.factor >= 3: 最好将 消息多保存几份,毕竟目前防止消息丢失的主要机制就是冗余。
  3. min.insync.replicas > 1: 控制的是消息至少要被写入到多少个副本才算是“已提交”。设置成大于 1 可以提升消息持久性。在实际环境中千万不要使用默认值 1。

确保 replication.factor > min.insync.replicas;
推荐设置成 replication.factor = min.insync.replicas + 1。

如果两者相等,那么只要有一个副本挂 机,整个分区就无法正常工作了。我们不仅要改善消息的持久性,防止数据丢失,还要 在不降低可用性的基础上完成

参考

极客时间—Kafka核心技术与实战
胡夕 - 博客园 –《Apache Kafka实战》

(0)

相关推荐

  • Kafka系列1:Kafka概况

    Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱.本篇就聊聊Kafka相关的一些知识点.主要包括以下内容: Kafka简介 ...

  • Kafka到底会不会丢消息

    目录1.kafka是什么一种高吞吐量的分布式.发布订阅消息系统,它可以处理消费者规模的,网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展能力--以时间复杂度为 O(1) 的方式提供消息 ...

  • 30分钟带你了解「消息中间件」Kafka、RocketMQ

    消息中间件的应用场景 主流 MQ 框架及对比 说明 Kafka 优点 Kafka 缺点 RocketMQ Pulsar 发展趋势 各公司发展 Kafka Kafka 是什么? Kafka 术语 Kaf ...

  • java开发之开源平台Kafka知识总结分享

    kafka的基本体系结构 一个完整的kafka消息中间件应该包含如下几个节点: 生产者:生产消息的节点 消费者:消费消息的节点 broker:接收生产者发送消息存储的节点 zookeeper:管理维护 ...

  • Kafka 会不会丢消息?

    一.认识 Kafka Kafka 是分布式发布-订阅消息系统.它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分. Kafka 是一个分布式的,可划分的,冗余备份的持久性的日志 ...

  • 真的,关于 Kafka 入门看这一篇就够了

    ImportNew 前天 以下文章来源于Java极客技术 ,作者cxuan Java极客技术java教程 java开发 java入门 java学习 java小课 java进阶 java知识 java技 ...

  • 小白学习Kafka(一):初识

    前言 刚学了rabbitmq, 怎么突然又开始了kafka? 艺多不压身 <摸着渐渐稀疏的头发> 只有对比才能有更深的理解 起于专业,终于专业 起步 知乎上kafka 推荐书籍?,其中列出 ...

  • 小学“语文主题学习”单元阅读教学策略2200字

    "语文课教什么?怎么教?"这是语文老师需要面对的既简单又复杂的问题.长期以来,阅读教学似乎被"内容分析"式的教学模式统治着.老师带领学生繁琐地分析课文的内容,学 ...

  • 八大券商主题策略:“喝酒”行情有讲究!紧握一线白酒 寻找高弹性二、三线

    摘要 [八大券商主题策略:"喝酒"行情有讲究!紧握一线白酒 寻找高弹性二.三线]白酒行业基本面整体景气度不减,虽然下半年基数较高,预计今年下半年业绩增速会低于上半年,但结构繁荣性局 ...

  • 课堂观察员系列:写作策略学习【二】——莫将“支架”变“绑架”,多功能作文课

    课堂观察员系列:写作策略学习[一]--课堂上的采访.接第一课<寻找金沙湖校园美景>. 围绕"写景观察表"再讲几句:这个表格,是支架,设计的初衷肯定是这样的,它一定是有用 ...

  • SunnyUI 学习1.2——主题

    SunnyUI 学习1.2--主题 炎黄子孙__ 2021-01-01 15:09:01  434  收藏 3 分类专栏: SunnyUI C# 文章标签: c# winform 版权 1 简介 主题 ...

  • 胡盼:喜欢,就研究它(学习心得二)

    遵体而教,依体而学. 这是我们的导师徐志伟在讲到语文课时特别提到的格言,是的,此"体"即文本的文体,不管是教还是学都要关注并遵循文体,因为只有把课堂上讲授(学习的)内容按照语文来学 ...

  • 心理表征有助于高效学习(二十)

    最近一口气写了19篇文章,老外的书写的很认真,翻译与语言文化是有很大差异,所以很多人和我说这本书不够精彩,没有兴趣看完,但是这本书在反复论证,例子真实度很高,参考价值很大 你有没有想过,作者为什么要对 ...

  • 八大券商主题策略:医药“小阳春”行情渐入佳境 细分赛道龙头名单曝光

    摘要 [八大券商主题策略:医药"小阳春"行情渐入佳境 细分赛道龙头名单曝光]山西证券表示,国产热门创新品种疫苗开启上市之路,成为行业市场持续高速增长的支撑点.我们持续看好具有上市( ...

  • 英语学习日记二(By Becca Wen)

    Every morning, I get up at 5:00, and then switch on my computer to visit BBC News for up-to-the-minu ...