消息系统-Kafka(5):可靠性保障
1. 副本1.1. 概述1.2. 失效副本
1.2.1.失效副本判定从 Kafka 0.9.x 版本开始通过唯一的一个参数 replica.lag.time.max.ms[默认大小为10,000]来控制,当 ISR 中的一个 follower 副本滞后 leader 副本的时间超过参数 replica.lag.time.max.ms 指定的值时即判定为副本失效,需要将此 follower副本 剔出除 ISR 之外。
注意
在 Kafka 0.9.x 版本之前还有另一个 Broker 级别的参数 replica.lag.max.messages 也是用来判定失效副本的,当一个 follower 副本滞后 leader 副本的消息数超过replica.lag.max.messages 的大小时则判定此 follower 副本为失效副本。
它与 replica.lag.time.max.ms 参数判定出的失败副本去并集组成一个失效副本的集合,从而进一步剥离出ISR。不过这个 replica.lag.max.messages 参数很难给定一个合适的值,若设置的太大则这个参数本身就没有太多 ...
消息系统-Kafka(3):消费者
1.消费者和消费者组1.1. 概述Kafka 消费者从属于消费者组。一个消费者组里的消费者订阅的为同一主题。每个消费者接受主题一部分分区的消息。
向消费者组里增加消费者是横向伸缩消费能力的主要方式。Kafka 消费者在做一些高延迟的操作,如向HDFS或数据库中写入数据,或者使用数据进行一些耗时的计算操作。在这些情况下,单个消费者无法跟上数据的生成速度,此时我们可以增加消费者,以分担负载,每个消费者只处理部分分区上的消息,这就是横向伸缩的主要手段。我们有必要为主题创建大量分区,负载增长时可以增加更多的消费者
注意: 一个主题的同一个分区同时只能供同一个消费者组里的一个消费者消费数据,因此不要让消费者的数量超过主题分区的数量,多于的消费者只会被闲置。
1.2. 消费方式由于 Push 模式 很难适应消费速率不同的消费者,因此消息发送速率是由 broker 决定的。它的目标是尽可能的以最快的速度传递消息,但是这样容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。 所以 kafka 采用 pull 模式,根据消费者的能力以适当的速率消费消息。==
Pull 模式的 ...
消息系统-Kafka(1):初识Kafka
一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。
1.消息系统一个消息系统负责将数据从一个应用传递到另外一个应用,应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。
概述分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
点对点传递模式在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次。当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。
发布-订阅模式在发布-订阅消息系统中,消息被持久化到一个 topic 中。与点对点消息系统不同的是,消费者可以订阅一个或多个 topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布-订阅消息系统中,消息的生产者称 ...
消息系统-Kafka(2):生产者
生产者即数据的发布者,该角色将消息发布到 Kafka 的 topic 中。broker 接收到生产者发送的消息后,broker 将该消息追加到当前用于追加数据的 segment 文件中。生产者发送的消息,存储到一个partition 中,生产者也可以指定数据存储的 partition。
1.生产者概览生产者即数据的发布者,该角色将消息发布到 Kafka 的 topic 中。broker 接收到生产者发送的消息后,将该消息追加到当前用于追加数据的 segment 文件中。生产者发送的消息,存储到一个partition 中,生产者也可以指定数据存储的 partition。
1.1.创建生产者ProductRecord 对象还可以指定键或分区。
在发送 ProductRecord 对象时,生产者要把键和值对象序列化为字节数组,这样才可以在网络上进行传输。接下来,数据被传给分区器。如果在 ProductRecord 对象里指定了分区,分区器直接将指定的分区返回。如果没有指定分区,分区器会根据 ProductRecord 对象的键选择一个分区。如果选定分区以后,生产者就知道向哪个主题和分区发 ...