Kafka 学习笔记(手抄版)[0001]

 

As The Titile

基本概念

分区(Partition)

一个分区只属于单个主题。

同一个主题下的不同分区所包含的消息是不同的。

分区再存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

offset 是消息在分区中的唯一标识。

Kafka 通过 offset 来保证消息在分区内的顺序性。

offset 并不跨越分区,即:Kafka 保证的是分区有序而不是主题有序。

分区可以分布在不同的服务器(broker)上。

kafka-topic-partitions

副本

Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。

同一分区的不同副本中保存的是相同的消息。

副本之间是一主多从的关系,其中 leader 副本负责处理读写请求,follower 副本负责与 leader 副本的消息同步。

副本处于不同的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。

分区中的所有副本统称为 AR(Assigned Replicas)。所有与 leader 副本保持一定程度同步的副本(包括 leader 副本在内)组成ISR(In-Sync Replicas),ISR 集合是 AR 集合中的一个子集。消息会先发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步,同步期间内 follower 副本相对于 leader 副本而言会有一定程度的滞后

前面所说的“一定程度的同步”是指可忍受的滞后范围,这个范围可以通过参数进行配置。与 leader 副本同步滞后过多的副本(不包括 leader 副本)组成 OSR(Out-of-Sync Replicas),由此可见,AR=ISR+OSR。在正常情况下,所有的 follower 副本都应该与 leader 副本保持一定程度的同步,即 AR=ISR,OSR 集合为空

操作

$ bin/kafka-topics.sh --zookeeper localhost: 2181/kafka \
    --create --topic topic-demo \
    --replication-factor 3 --partitions 4

$ bin/kafka-topics.sh --zookeeper localhost: 2181/kafka  \
    --describe \
    --topic topic-demo
$ bin/kafka-console-consumer.sh \
    --bootstrap-server localhost:9092 \
    --topic topic-demo

$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-demo
>Hello, Kafka!



开发(Java)

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.0.0</version>
</dependency>

import org.apache.kafka.clients.producer.ProducerConfig;
   
public static Properties initConfig(){
    Properties props = new Properties();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
            "org.apache.kafka.common.serialization.StringSerializer");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            "org.apache.kafka.common.serialization.StringSerializer");
    props.put(ProducerConfig.CLIENT_ID_CONFIG, "producer.client.id.demo");
    return props;
}

« EOF »

If you like TeXt, don’t forget to give me a star :star2:.