浅谈流处理平台之Kafka

1.什么是Kafka

一个流处理平台具有三个关键能力:

(1)发布和订阅消息(流),在这方面,它类似于一个消息队列或企业消息系统。

(2)以容错(故障转移)的方式存储消息(流)。

(3)在消息流发生时处理它们。

2.Kafka中的基本概念

Producer:消息和数据的生成者,向Kafka的一个topic发布消息的进程/代码/服务

Consumer:消息和数据的消费者,订阅数据(Topic)并且发布其发布的消息的进程/代码/服务

Consumer Grop:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息

Broker:物理概念,Kafka集群中的每个Kafka节点

Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离

Partition:物理概念,Kafka下数据存储的基本单元。一个Topic数据,会被分散存储到多个Partion,每一个Partion是有序的

Replication:同一个Partion可能会有多个Replica,多个Replica之间的数据是一样的

Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partion上与Producer和Consumer交互

ReplicaManager:负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等

Kafka强依赖于zookeeper

Kafka消息结构

3.Kafka相关API

  • 应用程序使用 Producer API 发布消息到1个或多个topic(主题)中。
  • 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。
  • 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。
  • Connector API 可构建或运行可重用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可以捕获表的每个变更。
     

3.Kafka的特点

分布式:多分区,多副本,多订阅者,基于Zookeeper调度

高性能:高吞吐量,低延迟,高并发,时间复杂度为O(1)

持久性与扩展性:数据可持久化,容错性,支持在线水平扩展,消息自动平衡

4.Kafka应用场景

可以用于消息队列,行为跟踪,元信息监控,日志收集,流处理,事件源,持久性日志(commit log)。

5.Kafka消息事务

为什么要支持事务?

满足“读取-处理-写入”模式

流处理需求的不断增强

不准确的数据处理的容忍

数据传输的事务定义

最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输

最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输

精确的一次:不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的。

事务保证-避免僵尸实例

(1)每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例

(2)Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据

(3)一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Procedure的后续事务性写入

相关参考:https://mp.csdn.net/console/editor/html

猜你喜欢

转载自blog.csdn.net/lovebaby1689/article/details/104598705