放弃KafKa系列(1)

1.kafka简单介绍


kafka是linkedin使用Scala编写具有高水平扩展(只要增加服务器数量,就能线性扩充系统性能。)和高吞吐量(单位时间内处理的请求数量)的分布式消息系统

kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接收者称为Consumer,此外KafKa集群有多个KafKa实例组成,每个实例(Server)称为broker。

无论是Kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性,为集群保存一些meta信息

2.KafKa主要功能


ApacheKafka®是一个分布式流媒体平台
流媒体平台有三个关键功能

  • 记录发生时处理流。
  • 以容错的持久方式存储记录流。
  • 发布和订阅记录流,类似于消息队列或企业消息传递系统。

3.应用场景


  • 构建可在系统或引用程序之间可靠获取数据的实时流数据管道
  • 构建转换或响应数据流的实时流应用程序

4.主要概念


  • 做为一个集群运行在一个或多个可跨多个数据中心的服务器上
  • kafka集群以称为主题的类别存储记录流
  • 每条记录由一个键,一个值和一个时间戳组成

4.1 四个核心API

  • Producer API

允许一个应用程序发布一串流式的数据到一个或者多个KafKa Topic

  • Consumer API
  • 允许一个应用程序订阅一个或者多个topic,并且对发布给它们的流式数据进行处理
  • Streams API
  • 允许一个应用程序做为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或者多个topic中去,在输入输出流中进行有效的转换
  • Connector API
  • 允许构建并运行可重用的生产者或者消费者,将KafKa topics连接到已存在的应用程序或者数据系统,比如,连接到一个关系型数据库,捕捉表的所有更变内容。

Streams示意图:

放弃KafKa系列(1)_第1张图片

4.4 Topics和Logs

Topic就是数据主题,是数据记录发布的地方,可以用来区分业务系统,KafKa中的Topics总是多订阅者模式,一个Topic可以拥有一个或者多个消费来来订阅它的数据

多订阅者模式莫好处在于消费者A可以订阅Topic1和Topic2,消费者B也可以订阅Topic1和Topic2,Producer消息一般都是大于Consumer

对于每一个Topic,Kafka集群都会维持一个分区(Partition)日志
放弃KafKa系列(1)_第2张图片

4.5 Partition

放弃KafKa系列(1)_第3张图片
至少有一个Partition,每个分区都是一个有序的,不可变的记录序列,不断附加到结构化的提交日志中。分区中的记录每个都被分配一个称为偏移的顺序ID号,它唯一地标识分区中的每个记录。事实上,基于每个消费者保留的唯一元数据是该消费者在日志中的偏移或位置。这种偏移由消费者控制:通常消费者在读取记录时会线性地提高其偏移量,但事实上,由于消费者控制位置,它可以按照自己喜欢的任何顺序消费记录。例如,消费者可以重置为较旧的偏移量以重新处理过去的数据,或者跳到最近的记录并从“现在”开始消费。

4.6 Distribution

日志的分区分布在Kafka集群中的服务器上,每个服务器处理数据并请求分区的共享。每个分区都在可配置数量的服务器上进行复制,以实现容错。

每个分区都有一个服务器充当“领导者(leader)”,零个或多个服务器充当“追随者(follower)”。领导者处理分区的所有读取和写入请求,而follower被动地复制数据。如果领导者失败,其中一个follower将自动成为新的领导者。每个服务器都充当其某些分区的领导者和其他服务器的追随者,因此负载在群集中得到很好的平衡。

备份:为了保证分布式可靠性,kafka0.8开始对每个分区的数据进行备份(不同的Broker上),防止其中一个Broker宕机造成分区数据不可用

5.使用场景


5.1 消息

消息系统被用于何种场景(eg:解耦数据生产者,缓存未处理的消息),相比较于其它消息系统,kafka有更好的吞吐量(一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高)、内置分区、副本和故障转移等功能

5.2 跟踪网站活动

kafka的最初始作用就是将用户活动跟踪管道重建为一组实时发布-订阅源。把网站活动发布到中心topic,其中每个活动类型有一个topic.

5.3日志聚合

日志聚合系统通常从服务器手机物理日志文件,并将其置于一个中心系统进行处理。

你可能感兴趣的:(KafKa)