【Kafka】之 概念(2)


一、简介


Kafka的标准定位是分布式流式处理平台。

Kafka架构图,如下:

Kafka处理思路:

  1. 生产者发送消息给Kafka服务器
  2. 消费者从Kafka服务器读取消息
  3. Kafka服务器依托Zookeeper集群进行服务的协调管理

(1)消息


信息承载体:消息

消息的完整格式,如图:

  1. 消息主要三个字段:
  • Key:消息键,对消息做partition(分区)时使用,即决定消息被保存在某个topic下的哪个partition,可由用户自定义
  • Value:消息体,保存实际的消息数据
  • Timestamp: 消息发送时间戳,用于流式处理及其他依赖时间的处理语义。如果不指定,则取当前时间
  1. Tips: Kafka使用紧凑的二进制字节数组来保存消息。
// 例如:
public class Message {
    private CRC32   crc;               // 校验码
    private short   version;           // 版本号
    private boolean codecEnabled;      // 
    private short   codecClassOrdinal;
    private String  key;               // 消息键
    private String  value;             // 消息体
}

为什么Kafka要把消息体转化为字节数组?

  1. JMMJava类继续优化——重排字段,减少内存使用量,但可能其中 7字节只是为了补齐之用
  2. 运行Java的操作系统通常都默认开启了页缓存机制,也就是说堆上保存的对象很有可能在页缓存中还保留一份,这造成了极大的资源浪费。
  1. 消息支持 4种 压缩类型:
  • 0:无压缩
  • 1:GZIP
  • 2:Snappy
  • 3:LZ4

(2)Topic 主题


如图:

Topic 用来区分实际业务。

topoc可以被多个消费者订阅。


(3)Partition 分区


如图:

partition是不可修改的有序消息序列,即有序的消息日志。

每个partition有自己专属的partition号,通常从 0 开始。

用户对partition唯一能做的操作就是在消息序列的尾部追加写入消息。

partition上的每条消息都会被分配一个唯一的序列号(offset,位移)

目的:为了提升系统的吞吐量。(多线程)


(4)offset 位移


如图:

topicpartition下的每条消息都被分配一个位移值(offset

so,消息:<topic, partition, offset> 三元组(tuple)

通过该元组值可以在kafka集群中找到唯一对应的消息


(5)replica 副本


冗余机制。

replica副本的目的:防止数据丢失。

replica副本分为两类:

  • 领导者副本(leader replica)
  • 追随者副本(follower replica)
  1. follower replica:不给客户端提供服务,即不负责响应客户端发来的消息写入和消息消费请求。
  2. 只被动地向领导者副本(leader replica)获取数据
  3. 作为备份,一旦 leader replica 所在的 broker宕机,将从 follower replica 选举出新的 leader 继续提供服务。

如图:


(6)ISR(in-sync replica,保持同步的 replica 集合)


ISR: 保持同步的replica集合

Kafka的消息交付承诺(message delivery semantic):
Kafka对于没有提交成功的消息不做任何交付保证,它只保证在ISR存活的情况下 “已提交” 的消息不会丢失。


(7)Broker


Broker通常是以服务器的形式出现,作为 “代理人”。

主要功能:持久化消息以及将消息队列中的消息从发送端传输到消费端。

KafkaBroker负责持久化producer端发送的消息,同时还为consumer端提供消息


(8)Producer 生产者


producer就是负责向Kafka写入数据的应用程序。


(9)Consumer 消费者


consumer 是从Kafka读取数据的应用。

若干个 consumer 订阅 Kafka集群中的若干个topic并从Kafka接收属于这些topic的消息


(10)Consumer Group 消费者组


消费者使用一个消费者组名(group.id)来标记自己,topic的每条消息都只会被发送到每个订阅它的消费者组的一个消费者实例上。

  1. 一个consumer group可能有若干个consumer实例
  2. 对于同一个group而言,topic的每条消息只能被发送到group下的一个consumer实例上。
  3. topic消息可以被发送到多个group
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值