Apache Kafka-核心组件和流程-副本管理器-设计-原理(入门教程轻松学)

本文深入探讨Kafka副本管理器的功能与工作流程,解析LEO与HW等关键概念,阐述副本过期检查、追加消息等职责,提升Kafka集群的可靠性和稳定性。

作者:稀有气体
来源:优快云
原文:https://blog.youkuaiyun.com/liyiming2017/article/details/82805479
版权声明:本文为博主原创文章,转载请附上博文链接!

本入门教程,涵盖Kafka核心内容,通过实例和大量图表,帮助学习者理解,任何问题欢迎留言。

目录:

本章简单介绍了副本管理器,副本管理器负责分区及其副本的管理。副本管理器具体的工作流程可以参考牟大恩所著的《Kafka入门与实践》。

副本管理器

副本机制使得kafka整个集群中,只要有一个代理存活,就可以保证集群正常运行。这大大提高了Kafka的可靠性和稳定性。

Kafka中代理的存活,需要满足以下两个条件:

  1. 存活的节点要维持和zookeeper的session连接,通过zookeeper的心跳机制实现
  2. Follower副本要与leader副本保持同步,不能落后太多。

满足以上条件的节点在ISR中,一旦宕机,或者中断时间太长,Leader就会把同步副本从ISR中踢出。

所有节点中,leader节点负责接收客户端的读写操作,follower节点从leader复制数据。

副本管理器负责对副本管理。由于副本是分区的副本,所以对副本的管理体现在对分区的管理。

在第三章已经对分区和副本有了详细的讲解,这里再介绍两个重要的概念,LEO和HW。

  1. LEO是Log End Offset缩写。表示每个分区副本的最后一条消息的位置,也就是说每个副本都有LEO。
  2. HW是Hight Watermark缩写,他是一个分区所有副本中,最小的那个LEO。

看下图:

分区test-0有三个副本,每个副本的LEO就是自己最后一条消息的offset。可以看到最小的LEO是Replica2的,等于3,也就是说HW=3。这代表offset=4的消息还没有被所有副本复制,是无法被消费的。而offset<=3的数据已经被所有副本复制,是可以被消费的。

 

副本管理器所承担的职责如下:

  1. 副本过期检查
  2. 追加消息
  3. 拉取消息
  4. 副本同步过程
  5. 副本角色转换
  6. 关闭副本

再此就不再一一讲解了,详情可以参考牟大恩所著的《Kafka入门与实践》。

### Kafka入门教程实战案例 #### 创建并配置开发环境 为了开始使用Kafka,需先安装Apache Kafka以及设置好相应的开发环境。通常情况下,在本地环境中搭建一个单节点的Kafka集群用于测试就足够了。 #### 编写简单的生产者程序 通过编写Java应用程序来发送消息到指定的主题。这里展示了一个基本的例子,其中包含了如何创建一个自定义分区策略的生产者[^2]: ```java import org.apache.kafka.clients.producer.*; import java.util.Properties; public class ProducerPartitionStrategyTest { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); try (Producer<String, String> producer = new KafkaProducer<>(props)) { for (int i = 0; i < 100; i++) { ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", Integer.toString(i), "message-" + i); producer.send(record); } } catch (Exception e) { System.err.println(e.getMessage()); } } } ``` 这段代码展示了怎样初始化`Properties`对象以配置连接参数,并利用`KafkaProducer`类实例化生产者对象。接着循环调用`send()`方法向名为`my-topic`的目标主题发布一系列记录。 #### 查看主题详情 可以借助命令行工具查看特定主题的信息,这有助于理解当前主题的状态及其副本分布情况。例如,下面这条指令可用于获取有关`my-replicated-topic`的具体描述信息[^3]: ```bash ./kafka-topics.sh --describe --zookeeper 192.168.1.106:2181 --topic my-replicated-topic ``` 此命令执行后将会返回关于该主题的一些元数据,包括其所属的分片数量、领导者位置以及其他重要的属性。 #### 构建简易流处理应用 构建基于Kafka Streams的应用程序,实现从输入主题读取消息并将它们转换成大写字母后再存入另一个输出主题的功能[^1]。以下是简化版的实现逻辑: ```java StreamsBuilder builder = new StreamsBuilder(); KStream<String, String> textLines = builder.stream("input-topic"); textLines.mapValues(value -> value.toUpperCase()).to("output-topic"); ``` 上述片段说明了如何建立一条由源主题流向目标主题的数据管道,并在此过程中对每条记录的内容进行了大小写的变换操作。 #### 客户端管理 除了单独启动各个组件外,还可以在同一进程中同时拥有多个生产者或消费者的实例。这种灵活性允许开发者更高效地管理扩展自己的分布式系统架构[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值