首页 > 其他分享 >Kafka Broker一些特性

Kafka Broker一些特性

时间:2023-10-18 16:32:32浏览次数:38  
标签:Producer 压缩 broker 特性 Broker 消息 Kafka Consumer

4.1 无状态的Kafka Broker :

1. Broker没有副本机制,一旦broker宕机,该broker的消息将都不可用。

2. Broker不保存订阅者的状态,由订阅者自己保存。

3. 无状态导致消息的删除成为难题(可能删除的消息正在被订阅),kafka采用基于时间的SLA(服务水平保证),消息保存一定时间(通常为7天)后会被删除。

4. 消息订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset进行重新读取消费消息。

4.2 message的交付与生命周期 :

1. 不是严格的JMS, 因此kafka对消息的重复、丢失、错误以及顺序型没有严格的要求。(这是与AMQ最大的区别)

2. kafka提供at-least-once delivery,即当consumer宕机后,有些消息可能会被重复delivery。

3. 因每个partition只会被consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅。

4. Kafka为每条消息为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。

4.3 压缩

Kafka支持以集合(batch)为单位发送消息,在此基础上,Kafka还支持对消息集合进行压缩,Producer端可以通过GZIP或Snappy格式对消息集合进行压缩。Producer端进行压缩之后,在Consumer端需进行解压。压缩的好处就是减少传输的数据量,减轻对网络传输的压力,在对大数据处理上,瓶颈往往体现在网络上而不是CPU。

那么如何区分消息是压缩的还是未压缩的呢,Kafka在消息头部添加了一个描述压缩属性字节,这个字节的后两位表示消息的压缩采用的编码,如果后两位为0,则表示消息未被压缩。

4.4 消息可靠性

在消息系统中,保证消息在生产和消费过程中的可靠性是十分重要的,在实际消息传递过程中,可能会出现如下三中情况:

  • 一个消息发送失败
  • 一个消息被发送多次
  • 最理想的情况:exactly-once ,一个消息发送成功且仅发送了一次

有许多系统声称它们实现了exactly-once,但是它们其实忽略了生产者或消费者在生产和消费过程中有可能失败的情况。比如虽然一个Producer成功发送一个消息,但是消息在发送途中丢失,或者成功发送到broker,也被consumer成功取走,但是这个consumer在处理取过来的消息时失败了。

从Producer端看:Kafka是这么处理的,当一个消息被发送后,Producer会等待broker成功接收到消息的反馈(可通过参数控制等待时间),如果消息在途中丢失或是其中一个broker挂掉,Producer会重新发送(我们知道Kafka有备份机制,可以通过参数控制是否等待所有备份节点都收到消息)。

从Consumer端看:前面讲到过partition,broker端记录了partition中的一个offset值,这个值指向Consumer下一个即将消费message。当Consumer收到了消息,但却在处理过程中挂掉,此时Consumer可以通过这个offset值重新找到上一个消息再进行处理。Consumer还有权限控制这个offset值,对持久化到broker端的消息做任意处理。

标签:Producer,压缩,broker,特性,Broker,消息,Kafka,Consumer
From: https://blog.51cto.com/u_16270487/7919409

相关文章

  • Kafka 生产者-消费者
    消息系统通常都会由生产者,消费者,Broker三大部分组成,生产者会将消息写入到Broker,消费者会从Broker中读取出消息,不同的MQ实现的Broker实现会有所不同,不过Broker的本质都是要负责将消息落地到服务端的存储系统中。具体步骤如下:生产者客户端应用程序产生消息:客户端连接对象将消息包装......
  • 从一次Kafka宕机说起(JVM hang)
    一、背景时间大概是在夏天7月份,突然收到小伙伴的情报,我们线上的一个kafka实例的某个broker突然不提供服务了,也没看到什么异常日志,反正就是生产、消费都停了。因为是线上服务,而且进程还在,就是不提供服务了,第一反应就是保留一下stack信息,先重启吧因为这个现象是第一次出现,不确......
  • PHP 核心特性之匿名函数
    来源:http://www.shanhubei.com/archives/2814.html在匿名函数出现之前,所有的函数都需要先命名才能使用functionincrement($value){return$value+1;}array_map('increment',[1,2,3]);有的时候函数可能只需要使用一次,这时候使用匿名函数会使得代码更加简洁直观,......
  • 开课吧前端1期.阶段4-2:es6的新特性
    es6介绍:太有用了,后面会经常用到的都是ES6,不可能是ES5,ES4ES6:是简称,全称为:ECMAScript标准ECMAScript和JavaScript不是相同的一个东西ECMAScript是一个标准,JavaScript是语言一个实现可以有很多语言去实现,但是目前只有JavaScript这一种实现了ECMAScript标准【中间倒闭......
  • 一图看懂CodeArts Governance 三大特性,带你玩转开源治理服务
    华为云开源治理服务CodeArtsGovernance是针对软件研发提供的一站式开源软件治理服务,凝聚华为在开源治理上的优秀实践经验,提供开源软件元数据及软件成分分析、恶意代码检测等能力,从合法合规、网络安全、供应安全等维度消减开源软件使用风险,助力企业更加安全、高效地使用开源软件。......
  • 大数据系统的关键特性
    1、Robustandfault-tolerant(容错性和鲁棒性):对大规模分布式系统来说,机器是不可靠的,可能会当机,但是系统需要是健壮、行为正确的,即使是遇到机器错误。除了机器错误,人更可能会犯错误。在软件开发中难免会有一些Bug,系统必须对有Bug的程序写入的错误数据有足够的适应能力,所以比机器容错......
  • 【RocketMQ】RocketMQ 5.0新特性(三)- Controller模式
    在RocketMQ5.0以前,有两种集群部署模式,分别为主从模式(Master-Slave模式)和Dledger模式。主从模式主从模式中分为Master和Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件,Slave节点会......
  • Kafka 什么速度那么快
    批量发送消息Kafka采用了批量发送消息的方式,通过将多条消息按照分区进行分组,然后每次发送一个消息集合,看似很平常的一个手段,其实它大大提升了Kafka的吞吐量。消息压缩消息压缩的目的是为了进一步减少网络传输带宽。而对于压缩算法来说,通常是数据量越大,压缩效果才会越好。因为有......
  • Kafka如何解决消息丢失的问题
    在Kafka的整个架构中可以总结出消息有三次传递的过程:Producer端发送消息给Broker端Broker将消息进行并持久化数据Consumer端从Broker将消息拉取并进行消费在以上这三步中每一步都可能会出现丢失数据的情况,那么Kafka到底在什么情况下才能保证消息不丢失呢?Producer端丢......
  • Kafka 入门教程
     Kafka是分布式发布-订阅消息系统,它最初由LinkedIn公司开发,使用Scala语言编写,之后成为Apache项目的一部分。在Kafka集群中,没有“中心主节点”的概念,集群中所有的服务器都是对等的,因此,可以在不做任何配置的更改的情况下实现服务器的的添加与删除,同样的消息的生产者和消费者......