编程知识 cdmana.com

Kafka介绍

介绍
Kafka是一种分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。
提供了类似于JMS的特性,但是在设计实现上完全不同。

JMS
JMS(Java Message Service,Java消息服务)API是一套消息服务的标准,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。
系统间异步通信,降低系统间耦合度。
支持两种消息模型

  1. 点对点或队列模型
  2. 发布者/订阅者模型

Kafka总体架构
image.png

基本概念
Topic:Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题。
Producer:发布消息的对象称之为主题生产者。
Consumer:订阅消息并处理发布的消息的种子的对象称之为主题消费者。
Broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个主题并从Broker拉数据,从而消费这些已发布的消息。
Partition:Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。

工作流程
image.png

Topic
对于每一个Topic,Kafka集群维护这一个分区的log,消息存储在日志文件中;
每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分赔了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的;
Kafka集群会将消息保留一段时间(可配置),无论消息是否被消费,到期后才删除,消费者仅持有消息的偏移量。
偏移量有消费者控制,消费者可以将偏移量重置为更老的一个偏移量,重新读取消息,所以一个消费者的操作不会影响其它消费者对此log的处理。
image.png

Partition
分区是物理上的一个概念,在Broker上以目录的形式存在,每个分区下包含多个段(Segment),每个Segment对应一个日志文件,文件的命名为消息的offset。
Topic的分区被分布到集群中的多个服务器上,每个服务器处理它分到的分区。
根据配置每个分区可以设置多个备份(replicas),复制到其它服务器作为备份容错。
每个分区有一个leader,零或多个follower。Leader处理此分区的所有的读写请求,而follower被动的复制数据。如果leader宕机,其它的一个follower会被推举为新的leader。
leader负责跟踪所有的follower状态,如果follower“落后”太多或者失效,leader将会把它从replicas同步列表中删除。当所有的follower都将一条消息保存成功,此消息才被认为是“committed”,那么此时consumer才能消费它。
一台服务器可能同时是一个分区的leader,另一个分区的follower。 这样可以平衡负载,避免所有的请求都只让一台或者某几台服务器处理。
Producer
生产者往某个Topic上发布消息,同时生产者也负责选择发布到Topic上的哪一个分区(发给分区的Leader);
消息发送策略分为同步、异步两种;
消息被路由到哪个partition上,是由producer客户端决定的.比如客户端采用Random,Hash及RoundRobin轮询等;
Consumer
通常来讲,消息模型可以分为两种, 队列和发布-订阅式。Kafka为这两种模型提供了单一的消费者抽象模型: 消费者组 (consumer group), 消费者用一个消费者组名标记自己。
一个发布在Topic上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了queue模型;假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。
我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。
image.png

Kafka的设计
高吞吐量,高可用是其核心设计目标。
数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能。
zero-copy:减少IO操作步骤(磁盘->内核->网卡)。
支持数据批量发送和拉取。
支持数据压缩。
Topic划分为多个partition,提高并行处理能力。
水平扩展。
image.png

消息队列对比
image.png

应用场景
适用场景:

  1. 用户行为数据分析
  2. 运营监控
  3. 日志收集
  4. 消息系统

不适用场景:

  1. 需要事物支持;
  2. 严格的顺序消费。

Kafka在风控
image.png

版权声明
本文为[Z2Min_]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000038137741

Scroll to Top