kafka的一些核心理论知识

Agenda

Apache Kafka: Core Concepts

  1. Kafka Record
  2. Topic and partition
  3. Segments
  4. Replication Factor
  5. Producer
  6. Consumer
  7. Rebalance
  8. Consumer Offsets
  9. Commit
  10. Delivery semantics for consumers

1. Kafka Record

  每一条发布到Kafka的消息被称为 “Record”
  Record包含两个部分:

  • Key
  • Value

 2. Topic and partition

Topic

  • 主题,kafka中的消息以topic进行分类,生产者将消息发送到特定的主题,而消费者则订阅特定的主题;
  • 类似于数据库中没有任何约束的表

Partition

  • 物理上的概念,一个topic可以分为多个partition,每个partition内部是有序的
  • 分区内的每个消息将获得一个递增id,叫做offset
  • 所有具有相同key的消息会被分到同一个partition

Partitions Count

  • 越多的partition可以提供更高的吞吐量
  • 越多的partition意味着需要更多的硬盘空间
  • 越多的partition增加了复制的延迟

Guidelines

  • Partitions per topic = (1 to 2) x (# of brokers), max 10 partitions
  • Example: in a 3 brokers setup, 3 or 6 partitions is a good number to start with

Offset
  一个消息最终存储到某个主题的某个分区中,分区在存储层面是一个可追加的日志文件,消息被追加到分区日志时会分配一个偏移量(offset),offset是消息在分区中的唯一标识,通过它可以保证消息在分区内有序。

 

3. Segments
  每个partition的文件夹由segment文件组成,segment文件包含.index文件、.log文件、.timeindex文件(早期版本中没有)三个文件, log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。

 

 4. Replication Factor

replication指的是消息的备份,为了保证kafka的高可用(当leader节点挂了之后,kafka依然能提供服务)kafka提供了备份的功能。这个备份是针对partition的。
配置数量:
应该至少是2,最大是3
如果有3个broker,设置为2
如果broker数量大于5,设置为3

 5. Producer

 6. Consumer

  • 多个消费者可以组成一个消费者组(consumer group),每个消费者组都有一个group.id,同一个消费组者的消费者可以消费同一topic下不同分区的数据,但是不会组内多个消费者消费同一分区的数据
  • 如果consumer group的消费者数量多于partition的数量,多出来的消费者不消费任何partition的数据。所以在实际的应用中,建议消费者组的consumer的数量与partition的数量一致

 7. Rebalance

Rebalance会发生在:

  • 一个消费者加入这个组
  • 一个消费者挂掉了
  • 添加新的分区

8. Consumer Offsets

  • Kafka把consumer group提交的offsets保存在“__consumer_offsets”文件夹里
  • 这样consumer就可以记住消费到了哪里
  • 更新分区当前位置的操作叫作提交

 9. Commit

Kafka Consumer API提供了多种方式提交偏移量:

自动提交

手动提交

  • 同步提交, commitSync()
  • 异步提交, commitAsync()
  • 同步和异步混合提交
  • 提交特定的偏移量

10. Delivery semantics for consumers

Kafka有3种交付语义:

  • At most once(最多一次): 消息可能会丢,但绝不会重复传输
  • At least once(至少一次):消息绝不会丢,但可能会重复传输
  • Exactly once(精确一次):每条消息肯定会被传输一次且仅传输一次
原文地址:https://www.cnblogs.com/fangjb/p/13223100.html