sudotty / reading_note

笔记
8 stars 0 forks source link

Kafka #14

Closed sudotty closed 4 years ago

sudotty commented 4 years ago

这张图显示了一个生产者进程附加到两个分区的日志中,和一个消费者从相同的日志中读取记录。日志中的每个记录都有一个相关的条目号,我们称之为偏移量。这个偏移量被消费者用来描述它在每个日志中的位置。

这些分区分布在一个机器集群中,允许一个主题容纳的数据比任何一台机器上都要多。

请注意,与大多数消息系统不同,日志始终是持久的。当接收到消息时,消息会立即写入文件系统。消息在读取时不会被删除,而是通过一些可配置的SLA(例如几天或一周)来保留。这允许在数据消费者可能需要重新加载数据的情况下使用。它还可以支持空间高效的发布-订阅,因为无论有多少个消费者,都有一个单一的共享日志;在传统的消息系统中,通常每个消费者都有一个队列,所以增加一个消费者会使你的数据大小增加一倍。这使得Kafka很适合做普通消息系统之外的事情,比如作为Hadoop等离线数据系统的管道。这些离线系统可能只是作为周期性ETL周期的一部分才会间隔加载,也可能会停机几个小时进行维护,在这段时间里,Kafka能够在需要时缓冲甚至是TB的未消耗数据。

Kafka还可以在多个服务器上复制其日志,以实现容错。与其他消息传递系统不同,我们的复制实现的一个重要架构方面是,复制不是一个需要复杂配置的异国情调,只在非常特殊的情况下使用。相反,复制被假定为默认情况:我们将未复制的数据作为一种特殊情况,当复制因子恰好为1时,我们将其作为一种特殊情况。

生产者在发布包含记录偏移量的消息时,会得到一个回执。发布到分区的第一个记录被赋予了偏移量0,第二个记录被赋予了1,以此类推,依次递增。消费者从一个偏移量指定的位置消耗数据,他们通过定期提交的方式将其位置保存在日志中:保存这个偏移量,以备该消费者实例崩溃时,另一个实例需要从它的位置恢复。

好了,希望这些都有意义(如果没有,你可以在这里阅读更完整的Kafka介绍)。