kafka基本概念
Posted gidybzc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka基本概念相关的知识,希望对你有一定的参考价值。
Apache Kafka?是一个分布式流处理平台,它到底是什么呢?
具有三个关键能力的流处理平台:
- 发布和订阅记录流,类似于消息队列或企业消息传递系统
- 以容错的持久方式存储记录流
- 在流生成的时候进行流的处理
Kafka通常有两大类应用:
- 用于构建可靠地获取系统或应用之间的数据的实时数据流管道
- 用于构建转换或响应数据流的实时数据流处理应用
为了理解kafka是如何实现这些功能的,让我们深入了解并从头开始探索kafka的功能。
首先是几个概念:
- Kafka作为集群运行在可以跨多个数据中心的一个或多个服务器上
- Kafka集群将记录流所存储的类别被称为主题 topics。
- 每个记录由一个键、一个值和一个时间戳组成
kafka有四个核心API:
- 生产者( Producer API ) 允许应用向一个或多个Kafka主题发布记录流。
- 消费者( Consumer API ) 允许应用订阅一个或多个主题,并处理生成给它们的记录流
- 流( Streams API ) 应用充当流处理器,消费来自一个或多个主题的输入流,生成输出到一个或多个主题的输出流,高效的实现输入流到输出流的转换
- 连接器( Connector API) 允许构建和运行将Kafka主题连接到现有应用程序或数据系统的可重用生产者或消费者。例如,连接到关系数据库的可能捕获对表的每个更改的连接器
在Kafka中,客户端和服务器之间的通信是通过一个简单的、高性能的、与语言无关的TCP协议完成的。TCP协议受版本控制,并与旧版本保持向后兼容性。我们为Kafka提供了一个Java客户端,但是客户端可以使用多种语言。
主题和日志
让我们首先深入了解Kafka提供的记录流的核心抽象概念——主题(topic)
主题是发布记录的类别或概要名称。Kafka中的主题通常是多订阅的;也就是说,一个主题可以有0个、1个或多个消费者订阅写入主题的数据。
对于每个主题,Kafka集群都维护一个如下所示的分区日志:
每个分区都是一个有序的、不可变的记录序列,记录被不断的添加到分区中。分区中的记录都被分配了一个有序的id号,叫做偏移,作为每个记录在分区中的唯一标示。
在一个可配置的时间内,kafka能够保留所有已发布的记录,无论记录是否被消费。例如,如果保留策略设置为2天,那么在发布记录后的2天内,记录是可以被消费的,之后记录将被丢弃来释放空间。Kafka的性能对于数据量来说是恒定的,因此长时间存储数据不是问题。
事实上,保留在每个消费者的基础上的唯一的元数据是消费者在日志中偏移或位置。偏移量由消费者控制:通常,消费者在读取记录时偏移量将线性增大;但实际上,由于位置是由消费者控制的,所以它可以按自己喜欢的任何顺序来消费记录。例如,使用者可以重置到旧的偏移量来重新处理过去的数据,或者跳到最近的记录并从“现在”开始消费。
这些特性的组合意味着Kafka的消费者非常轻量的,他们可以再对集群或其他消费者不造成太大影响下消费数据。例如,可以使用kafka的命令行工具“跟踪”任何主题的内容,而不更改任何现有消费者使用的内容。
日志中的分区有几个用途。首先,它们允许日志扩展到超出单个服务器的大小。每个单独的分区必须适合承载它的服务器,但是一个主题可以有多个分区,一个主题可以处理任意数量的数据。其次,它们作为平行的单元——关于这点,稍后会详细介绍。
分布式
日志的分区分布在Kafka集群中的服务器上,这样每个服务器都能够处理分区共享的数据和请求。为了容错,每个分区在任意数量的服务器之间复制。
每个分区都有一个服务器充当leader,其余服务器充当follower。leader处理分区的所有读写请求,而follower则被动地复制leader。如果leader down了,其中一个follower将自动成为新的领导者。每个服务器作为它的一些分区的leader和其他分区的追随者,因此负载在集群中得到很好的平衡。
跨域复制
kafka的映射机制为集群提供跨域复制的能力。基于映射机制,消息被复制到多个数据中心或云。可以用于各种场景的备份和恢复、或各种场景下将数据布置在离用户更近的地方、或者支撑局部的数据需求。
Producers
Producers 将消息发布到指定的topic中,并决定分配到主题中的哪个分区。可以通过循环的方式简单的实现负载平衡,或者可以根据某种特定的分区函数来实现(比如根据记录中的某个键)。
Consumers
每个消费者都会打上消费者组的标签,发布到主题的每个记录被分配给到每个订阅消费者组中的一个消费者实例。消费者实例可以位于单独的进程中,也可以位于单独的机器上。
如果所有消费者实例具有相同的使用者组标签,则消息将有效地平均加载到使用者实例。
如果所有消费者实例具有不同的使用者组标签,则每个消息将广播到所有消费者进程。
以上是关于kafka基本概念的主要内容,如果未能解决你的问题,请参考以下文章