kakfa介绍
Kafka是一个分布式的流处理平台/框架, 主要用于构建以数据流为中心的分布式系统。
Kafka对数据采取流式处理, 通过类似“发布-订阅”的方式,实现了高吞吐量的消息传递机制。它将消息持久化到磁盘,形成一个存储层,以支持大量数据的存储。
Kafka内置了分区、冗余及容错机制,可以提供非常高的系统可用性。同时也能实现低延迟和高吞吐量的传输。
Kafka还通过消费组的机制,可以对数据流进行并行消费,实现水平扩展。并且支持各种流式处理以满足复杂的数据流管道和应用。
总的来说,Kafka提供了一个分布式,可扩展,高性能,持久化和容错的消息队列和流处理平台。这些功能正是构建健壮的分布式数据流系统所需要的。
所以说,Kafka的本质是一种分布式流处理架构和框架,用于在分布式系统中获取、存储、处理大量数据流。它解决了分布式环境下消息传递的可靠性、顺序性、容错性、扩展性等问题。
kafka术语说明
Kafka的几个核心概念和原理做更详细的说明:
主题 - Topic
Kafka中的Topic是一个类别的概念,是消息发布和订阅的逻辑上的归属。每个Topic可以有一个或多个Partition组成。 Producer发布消息时,会把消息发送到指定的Topic;Consumer订阅消息时,会订阅某个Topic中的消息。一个Topic可以有多个Consumer订阅。
分区 - Partition
Partition是Topic的物理容器,用于存储消息数据。每个Partition都有一个消息队列,消息会持久化在这个队列中。Partition中的消息都会分配一个从0开始的序列号Offset。Consumer从Partition读消息时,是按Offset顺序读取的。通过Partition,可以实现消息顺序和水平扩展。
代理 - Broker
Broker是Kafka集群中的一个服务器节点,一个集群可以有多个Broker。每个Broker可以容纳多个Topic以及Topic的Partition。Broker接收来自Producer的消息,为Consumer提供消息存储和服务。
生产者 -Producer
Producer就是消息生产者,客户端代码会实例化一个Producer对象,然后继续发布消息到Kafka集群中的Topic。Producer在消息发送过程中可选择不同的分区,并实现故障自动恢复以确保消息发送的可靠性。
副本 - Replica
Kafka中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
消费者 - Consumer
Consumer是消息消费者,客户端代码实例化一个Consumer对象,并订阅指定的Topic,然后消费Partition中的消息。Consumer属于消费组,消息会在组内的成员间实现负载均衡。消费位置也会得到Broker端的持久化保障。
消息位移 - offset
表示分区中没条消息的未知信息,是一个单调递增且不变的值。
消费者位移 - consumer offset
标识消费者的消费进度,每个消费者都有自己的消费进度。因为每个Partition本身就是一个消息队列,所以从一个Partition消费消息可以保证消息的顺序。Kafka不能保证一个Topic跨多个Partition的消息顺序。
消费组 - consumer group
消费组是一个或多个Consumer的集合,这些Consumer会协调在同一个Topic的多个Partition上消费消息,以实现负载均衡和容错。
分区复制
Partition可以配置多个副本,存在一个leader和多个follower。这样当leader失效时,其中一个follower可以成为新的leader,从而保证Partition的高可用。
kafka架构说明
Kafka的设计目标是实现一个分布式,高吞吐量,低延迟,高可用和可伸缩的消息系统。为此,其架构采用了以下技术手段:
Kafka实现了类似“发布-订阅”模式的消息流机制, Producer(发布者) 可以将消息发布到指定的Topic中,Consumer(订阅者)可以订阅Topic并拉取消息。这种设计实现了生产者和消费者的解耦。
对消息进行持久化存储,一方面可以防止消息丢失;另一方面也支持消费者可以回溯读取消息。持久层的设计直接影响到Kafka的整体性能。
Topic分区(Partition)机制,既可以支持数据的并行处理,又可以通过复制实现高可用。 Partition还保证了消息的顺序性。
引入消费组的概念,多个Consumer可以加入同一个消费组,共同消费Topic中的消息,实现负载均衡。
Zookeeper用于协调Kafka集群,保存一些元信息。但是Kafka的设计尽量减少了对Zookeeper的依赖。
Producer可批量发送消息,压缩消息等来提升发送性能;消息以二进制格式发送。
支持消息顺序,每个Partition内消息有序,不同分区之间无序。
提供复杂流处理的Streams API。
总之,Kafka的设计充分利用了分布式系统和流处理中的一些技术,实现了一个分布式,可扩展,高性能的消息系统。