Kafka作为分布式消息系统的系统解析

Apache Kafka是一个分布式消息系统,基于生产者和消费者模型,使用Scala和Java编写。Kafka提供高吞吐量的发布订阅服务,支持多订阅者,允许消息持久化到磁盘,适合实时应用程序和ETL。Kafka的核心概念包括broker、topic、producer、consumer、partition和offset。消息分发策略包括默认的分区策略,consumer通过CG实现广播和单播。Kafka使用文件存储机制,每个topic由多个partition组成,每个partition由多个segment文件构成,消息通过索引文件快速查找。
摘要由CSDN通过智能技术生成

Kafka概述

Apache Kafka由Scala和Java编写,基于生产者和消费者模型作为开源的分布式发布订阅消息系统。它提供了类似于JMS的特性,但设计上又有很大区别,它不是JMS规范的实现,如Kafka允许多个消费者主动拉取数据,而在JMS中只有点对点模式消费者才会主动拉取数据。

Kafka对消息保存时根据topic进行归类,发送消息者称为producer,消息接收者称为consumer。Kafka集群由多个Kafka实例组成,每个实例称为broker。并且Kafka集群基于zookeeper保存一些meta信息,来保证系统的高可用性。

生产者可以直接把数据传递给broker,broker通过zookeeper进行leader和follower的选举管理;消费者可以通过zookeeper保存读取的位置offset以及读取的topic的分区信息。这样做有以下几个好处:

1.生产者和消费者的负载解耦

2.消费者可以按照自己的“能力”拉取数据

3.消费者可以自定义消费数量

Kafka与传统消息系统相比,有以下不同:

1.Kafka是分布式的,易于水平扩展

2.同时为发布和订阅提供高吞吐量

3.支持多订阅者,当失败时能自动对消费者进行rebalance

4.将消息持久化到磁盘,因此可用于批量消费,例如ETL以及实时应用程序

Kafka中的重要概念

broker

Kafka集群中的实例进程,负责数据存储。在Kafka集群中每个broker都有一个唯一的brokerId。通过broker来接受producer和consumer的请求,并把消息持久化到磁盘。每个Kafka集群中会选举出一个broker来担任Controller,负责处理分区的leader选举,协调分区迁移等工作

topic

Kafka根据topic对消息进行归类(逻辑划分),发布到Kafka集群的每条消息都需要指定一个topic。落到磁盘上对应的是partition目录,partition目录中有多个segement组合(后缀为index、log的文件)。一个topic对应一个或多个partition,一个partition对应多个segment组合

producer

向broker发送消息的生产者。负责数据生产和数据分发。生产者代码可以集成到任务系统中。
数据分发策略默认为defaultPartition Utils.abs(key.hashCode)%numPartitions

consumer

从broker读取消息的消费者【实际上consumer是通过与zookeeper通信获取broker地址进行消息消费】

ConsumerGroup

数据消费者组,ConsumerGroup(以下简称CG)可以有多个。可以把多个consumer线程划分为一个组,组里面所有成员共同消费一个topic的数据(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值