Kafka的基本概念
目录
什么是Kafka
Kafka是一个使用Scala语言编写的高扩展,高吞吐,高并发的分布式消息系统。Scala语言开发的中间件自带高并发属性。Kafka的使用非常依赖zk,zookeeper用来保证系统的可用性
Kafka基于发布/订阅模式,主要应用于大数据领域,同时它也是一个“流处理平台”
Kafka的流特性
1.Kafka把对象序列化,最终是以文件的形式对数据流进行存储并提供容错机制
2.Kafka可发布和订阅流数据,类似消息队列或企业级消息系统
3.Kafka可以在流数据产生时即对其进行处理
Kafka的架构与组成
- Producer
消息生产者,就是向kafka broker发送消息的客户端
- Consumer
消息消费者,从kafka broker获取消息的客户端
- Consumer Group
消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者进行消费;消费者组之间互相不影响。所有的消费者都属于某个消费者组,即消费者组逻辑上是一个订阅者。
- Broker
一台kafka服务器就是一个broker。一个集群由多个broker组成,一个broker可以容纳多个topic
- Topic
可以理解为一个队列,位于Broker中,生产者和消费者面向的都是一个个的topic
- Partition
分片。一个topic可以分布到多个broker(服务器)上,一个topic可以分为多个partition,每个partition都是一个有序队列
- Replica
副本,为保证集群中某个节点发生故障时,该节点上的partition数据不丢失,而进行的备份。一个topic的每个分区都有若干副本,一个leader和若干follower
- Leader
副本中的Leader,只有一个。leader是生产者发送数据的对象,也是消费者消费数据的对象
- Follower
副本中的Follower,有多个。实时的从leader中同步数据,保持和leader数据的同步。当leader发送故障时,某个follower会成为新的leader
Kafka的四个核心API
- Producer API
允许一个应用程序发布一串流式的数据到一个或多个topic
- Consumer API
允许一个应用程序订阅一个或多个topic,并且对发布给它的数据进行处理
- Streams API
允许一个应用程序作为一个流处理器,消费一个或多个topic产生的输入流,然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效切换
- Connector API
允许构建并运行可重用的生产者或消费者,将Kafka topics连接到已存在的应用程序或数据系统。比如连接到一个关系型数据库,捕捉表的所有变更内容
Kafka的应用场景
一、消息系统
用来解耦生产者数据,缓存未处理的消息。Kafka相比其他消息队列,有更好的吞吐量、更好的可用性,有利于处理大规模消息。
kafka在某种程度上对消息的顺序处理的更好,一个分片不能被多个线程消费,消费者不能比分片多。
二、存储系统
写入到kafka中的数据持久化到了磁盘中,并且有冗余备份。kafka以流的形式存储数据,允许client自行控制读取位置,根据需求可以将数据进行回放。
三、日志聚合
日志系统对日志的处理一般分为收集、清洗、聚合、存储、展示
kafka可实现日志清洗、聚合、存储。常和ELK搭配使用,在消息进入ELK之前,通过Kafka这个消息队列起到缓冲的作用。
四、跟踪网站活动
kafka可以将网站活动(浏览网页、搜索或其他用户操作)发布到中心topics中, 每种活动类型对应一个topic。基于这些订阅源,能够实现一系列用例,如实时处理、实时监视、批量地将Kafka的数据加载到Hadoop或离线数据仓库系统,进行离线数据处理并生成报告。
五、流处理
流处理用来处理无序的数据,进行流式计算。流处理包含多个阶段:从input topics消费数据,做各种处理,将结果写入到目标topic。相比Flink、Spark、Storm等正统流处理框架,Kafka在流处理中更多扮演流存储的角色。
为什么要用流处理代替批处理?批处理存在一天的延时(一般晚上处理),流处理可以实时处理