Kafka——入门

一.概述

1.1 Kafka简介

Kafka是一个分布式,分区,多副本,多订阅者,基于Zookeeper协调的分布式日志系统,也可以是消息系统。常见可以用于web/nginx日志,访问日志,消息服务等。

主要设计目标有:

  • 以时间复杂度为o(1)的方式提供消息持久化能力,即使对TB级以上的数据也能保证常数时间的访问性能

  • 高吞吐率。即使在廉价的机器上也能做到支持每秒100K消息的传输

  • 只是Kafka Server间的消息分区,及分布式消费,同时保证每个partition 内消息顺序传输

  • 同时支持离线数据处理和实时消息处理。

Kafka主要有两大应用场景:

  • 消息队列:建立实时流数据管道,以可靠地在系统或应用程序之间获取数据

  • 数据处理:构建实时的流数据处理程序来转换或处理数据流

1.2 消息系统概述

一个消息系统负责将数据从一个应用传递到另一个应用中,应用只需关注数据,无需关注数据在两个或多个应用之间如何传递的。分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种消息传递模式:

点对点消息传递模式:消息持久化一个队列中,此时,将有一个或者多个消费者消费队列中的数据。但是一条消息只能被消费一次,当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中被删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的数据。

发布订阅消息传递模式:消息被持久化一个topic中。消费者可以订阅一个或多个topic,消费可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。在发布订阅模式,消息生产者称为发布者,消费者称为订阅者。

1.3 优点

  • 解耦
  • 冗余
  • 扩展性
  • 灵活性&峰值处理能力
  • 可恢复性
  • 顺序保证
  • 缓冲
  • 异步通信

二.Kafka基础架构

                                                           

  • broker:Kafka集群中包含一个或多个服务器,服务器节点称为broker,这个也可以看做Kafka的一个实例。
  • topic:每条发布到Kafka集群的消息都有一个类别,这个类别就是topic(物理不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上单用户只需要指定消息的topic即可生产或者消费数据而不必关系数据存储在哪个位置)
  • partition:topic中的数据被划分成一个多个partition。每个topic至少有一个partition。每个partition中的数据使用多个segment文件存储。partition数据是有序的,不同partition间数据丢失了数据的顺序,如果topic中有多个partition,消费数据时就不能保证数据之间的有序性。

(broker存储topic数据。如果topic有N个partition,集群有N个broker,那么每个broker存储该topic中的一个partition;如果该topic有N个partition,集群有N+M个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储;如果某topic中有N个partition,集群中broker数目少于N个,那么一个broker存储该topic的一个或多个partition,在实际生产环境中,尽量避免这种情况的发生,这种情况会导致Kafka集群数据不均衡)

为了使得Kafka的吞吐率可以线性提高,物理可以把topic分为一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件。创建一个topic时,可以指定一个partition。

Kafka会为每一个consumer gropu保存一些metadata信息——当前消费的消息的partition,也就是offset。这个offset由consumer控制,所以broker是无状态的,不需要标记哪些消息是被消费过的,也不需要通过brokser去保证同一个consumer group只有一个consumer能消费某一条消息,因此也不需要锁机制。

  • producer:生产者即数据的发布者,该角色将消息发布到Kafka的topic中
  • consumer:消费者可以从broker中读取数据。消费者可以消费多个topic中的数据
  • consumer group:每个consumer属于一个特定的consumer group。同一个topic中的一条消息只能被同一个consumer group中的一个consumer消费,但多个consumer group可同时消费这一消息。
  • leader:每个partition有多个副本,其中有且一个作为leader,leader是当前负责数据读写的partition
  • follower:follower追随leader,所有写请求通过leader,数据变更会广播给所有follower,follower与leader保持数据同步。如果leader失败,则会从follower中选举出一个新的leader。当follower与leader挂掉,卡住或者同步太慢,leader会把这个follower从ISR中删除,重新创建。

三.Kafka delivery guarantee

  • At most once:消息可能丢失,但是绝对不重复传输

  • At least once:消息绝对不会丢失,但是很有可能重复传输

  • Exactly once:每条数据肯定会被传输一次且仅传输一次

Kafka默认保证At least once,并且允许通过设置Producer异步提交来实现At most once。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值