KafkaKafka分布式流式处理平台

Posted 玩大数据的snoopy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KafkaKafka分布式流式处理平台相关的知识,希望对你有一定的参考价值。

本博客文章如无特别说明,均为原创!转载请注明出处:Big data enthusiast(http://www.lubinsu.com/)

作为一个分布式消息发布订阅系统,Kafka在大数据领域被人们所熟知,在这里对Kafka的一些基本概念做一个简介,后续将对Kafka做一整个专题的介绍。希望对大家有所帮助。

Kafka流平台有如下三个特征:

  • Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.

  • Store streams of records in a fault-tolerant durable way.

  • Process streams of records as they occur.

也就是说它类似于消息队列或者企业级消息系统,可以发布订阅流中的数据、可以将接收到的数据持久化达到高容错性的效果,你还可以通过这个平台实时处理接收到的流式数据。

  • API

我们先来看下Kafka的四类主要的API:

  1. Producer API:发布流数据到一个或者多个topic

  2. Consumer API:用于订阅一个或者多个topic,并且处理产生的消息

  3. Streams API:作为一个流处理器,有效的将一个输入流转换为一个输出流,也就是将一个或者多个topic的数据处理转换成另一个或者多个topic的数据

  4. Connector API:我们可以通过connector api构建并运行一个可以重复使用的生产者或者消费者,来连接Kafka的topic与应用程序,或者数据系统

概念释义

开头说了这么多,可能大家对一些新的概念还不是很熟悉,这里我们来了解下几个专有名词:

  1. Topic(主题):Kafka集群分类保存的一系列流数据,这些分类就叫做主题

A topic is a category or feed name to which records are published. Topics in Kafka are always multi-subscriber; that is, a topic can have zero, one, or many consumers that subscribe to the data written to it.

也就是说kafka中的topic支持一个或者多个消费者订阅它。并且针对每个topic,Kafka维护了一个经过分区的log,如下图所示:【Kafka】Kafka分布式流式处理平台

在这里,每个分区都是一个有序的、不可变的、不断追加的日志序列。并且每一条记录在这里都用一个顺序生成的id标示了——叫做offset,这个offset唯一标志了一个partition的一条记录。不管这些消息有没有被消费掉,Kafka集群会根据所配置的时间段将每一条记录持久化在磁盘中。只要消息在指定的时间内还未过期,我们都可以从中消费到它。

  1. 分布式

所有日志的分区,分布在Kafka集群的服务器上,每台服务处理其所负责的partition的数据和请求,每个partition根据配置可以拥有多个副本并分布到不同的服务器上,来达到容错的效果。

每个partition拥有一个leader,并且有0个或者多个follower,leader负责所有的读写,follower负责被动的从leader复制。如果leader失败了,那么其中的follower将会自动转为leader。每台服务器扮演了一部分topic的leader,一部分topic的follower,以此达到负载均衡的效果。

  1. Producer(生产者):Kafka的生产者根据指定的逻辑(如:round-robin),将消息分发到指定topic的partition下

  2. Consumer(消费者):Kafka的消费者根据group name来标识自己,每条发布的消息最终会传送给每个指定了group name的消费者,同一个消费者(只要group name相同)可以分布在不同服务器的不同进程中

  • If all the consumer instances have the same consumer group, then the records will effectively be load balanced over the consumer instances.–同一个group name可以达到负载均衡的效果

  • If all the consumer instances have different consumer groups, then each record will be broadcast to all the consumer processes.–不同的group name,那么记录将会被拷贝多份分发给各个group

由此可见,我们可以通过创建多个同名的consumer,实现消费者的高可用和负载均衡。如果新的同名消费者实例加入进来,那么它会从其他的同名消费者实例中接管该topic下的部分partition,如果某个实例down了,那么它接管的partition则会被其他同名消费者接管。另外,Kafka的数据有序性只是在单个partition中有序,而在不同的patition之间的数据是无法保证消费的先后顺序的。如果我们需要达到数据消费的有序性,那么可以将partition的数量设置为1,而这样意味着这个topic下的每个group消费实例只能有一个。


以上是关于KafkaKafka分布式流式处理平台的主要内容,如果未能解决你的问题,请参考以下文章

技术干货流式计算 Spark Streaming 和 Storm 对比

流式处理框架对比

强势分享:关于流式计算的那些事儿

Kafka总结

kafka原理解析

Kafka详细原理