Kafka

本文深入探讨Kafka的客户端特性,包括压缩、消息顺序保证和无消息丢失策略。详细介绍了副本机制,如ISR、高水位概念以及位移主题在确保消息交付可靠性中的作用。此外,还讨论了Kafka的内核机制,如请求处理和控制器组件。文章最后涉及了Kafka的管理与监控,包括配置、日志截断和集群搭建。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1. Kafka入门(消息写入磁盘)

topic有多个分区(分片),分配在多个broker中,分区之间有副本
不同消费者有不同的位移,每个分区最后读取的消息偏移量保存在Zookeeper 或Kafka上,读取状态不会丢失。

定义:点对点模型和发布订阅模型
作用: 削峰填谷,Kafka是消息引擎系统,也是分布式流处理平台
客户端服务端:生产者和消费者统称为客户端(Clients),Kafka 的
服务器端
由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成
高可用(booker,副本),可伸缩(分区)在这里插入图片描述

2. 客户端

分区(每个分区的消息是有顺序的)

  • 作用(可伸缩,可放到多个机器上,高吞吐,负载均衡)
  • 策略(轮询,随机,按消息键保序)
    如何保证消息顺序(单个分区或基于某个值按照消息键保存,实现单个分区内的顺序)

2.1 压缩( Producer 端压缩、Broker 端保持、Consumer 端解压缩)

有时Broker 会解压缩解压缩(因为消息体格式不一样,主要是为了兼容老版本的消费者程序),

2.2 无消息丢失

生产者有副本(ISR,设置最大延时,重试,副本数等),发消息对回执做处理,producer的ack机制
消费者不要自动提交位移

Kafka 只对“已提交”(当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,且 Producer 接到 Broker 的应答)的消息做有限度(消息保存在 N 个 Kafka Broker 上,那么这个前提条件就是这 N 个 Broker 中至少有 1 个存活)的持久化保证。

  • 不用producer.send(msg),而要使用 producer.send(msg, callback),要使用带有回调方法的API,我们可以根据回调函数得知消息是否发送成功,如果发送失败了我们要进行异常处理,比如存储到其他介质来保证消息不丢
  • 维持先消费消息(阅读),再更新位移(书签)的顺序
  • 如果是多线程异步处理消费消息,Consumer 程序不要开启自动提交位移,而是要应用程序手动提交位移

如果有些消息我们是可以容忍丢失的,我只希望kafka以最快的速度接收消息

  1. 0,producer不等待broker的ack,这一操作提供了一个最低的延迟,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据。
  2. 1,producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据。
  3. -1,(all):producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack。但是如果在follower同步完成后,broker发送ack之前,leader发生故障,那么会造成数据重复。

retries=MAX(重试)
unclean.leader.election.enable = false(follower replica落后太多的不能竞选)
replication.factor ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值