首页 > 其他分享 >持续总结中!2024年面试必问 20 道 Kafka面试题(三)

持续总结中!2024年面试必问 20 道 Kafka面试题(三)

时间:2024-06-03 11:00:48浏览次数:11  
标签:面试题 必问 20 ISR 领导者 追随者 Kafka 副本 列表

上一篇地址:持续总结中!2024年面试必问 20 道 Kafka面试题(二)-CSDN博客

五、Kafka 的 ISR (In-Sync Replica) 是什么?

Kafka的ISR(In-Sync Replicas)是Kafka中用于维护数据一致性和高可用性的关键概念之一。ISR列表包含了一个领导者副本(Leader)和与之保持完全同步的追随者副本(Followers)。以下是ISR的详细说明:

  1. 领导者副本(Leader)

    • 在Kafka中,每个分区都有一个领导者副本,负责处理所有的读写请求。生产者发送的消息首先会被写入领导者副本,然后由领导者副本负责将消息复制到追随者副本。
  2. 追随者副本(Follower)

    • 追随者副本的作用是从领导者副本那里同步数据。追随者副本会尝试不断从领导者那里拉取新的消息,并将其写入自己的日志中。
  3. 同步状态

    • 当追随者副本成功从领导者副本同步消息后,它会更新自己的日志,并发送一个确认给领导者。只有当追随者副本的消息落后于领导者副本的消息不超过特定的配置值(replica.lag.time.max.ms)时,它才会被认为是同步的。
  4. ISR列表

    • ISR列表是由领导者维护的,包含了当前与领导者保持完全同步的所有追随者副本。如果追随者副本落后于领导者副本的消息太多,它将从ISR列表中被移除。
  5. 数据一致性

    • Kafka确保在任何时候,只有ISR列表中的副本才会被用于处理读写请求。这意味着,即使有追随者副本因为网络问题或故障而落后,它们也不会影响数据的一致性。
  6. 故障转移

    • 如果领导者副本发生故障,Kafka会从ISR列表中选举一个新的领导者。由于ISR列表中的追随者副本都是与原领导者完全同步的,因此可以保证数据不会丢失。
  7. 性能考虑

    • 通过维护ISR列表,Kafka可以确保只有同步的副本参与数据复制,这有助于提高集群的性能。如果允许所有追随者副本都参与复制,那么可能会因为网络延迟或追随者副本的性能问题而影响整体性能。
  8. 动态调整

    • ISR列表是动态调整的。如果追随者副本能够赶上领导者副本的进度,它可以重新加入ISR列表。同样,如果追随者副本落后太多,它将被从ISR列表中移除。
  9. 监控和配置

    • Kafka提供了监控工具来查看每个分区的ISR列表状态。管理员可以根据需要调整相关配置,如min.insync.replicas,以确保数据的一致性和可用性。

通过ISR机制,Kafka能够在保证数据一致性的同时,提供高可用性和良好的性能。这种机制使得Kafka成为一个非常强大的分布式消息队列系统。

六、如何获取 Kafka 中 topic 主题的列表?

在Kafka中,获取topic主题列表可以通过几种不同的方法实现,包括使用Kafka命令行工具、Kafka AdminClient API或通过编写自定义的客户端应用程序。以下是一些常用的方法:

1. Kafka命令行工具(kafka-topics.sh脚本)

Kafka提供了一个命令行工具kafka-topics.sh,它可以用来管理topic,包括列出所有的topic。

基本命令格式

bin/kafka-topics.sh --list --zookeeper <zookeeper_host>:<zookeeper_port>

  • --zookeeper:指定ZooKeeper的连接字符串。如果你的Kafka版本是2.8.0或更高,使用--bootstrap-server来指定Kafka集群的bootstrap服务器。
  • <zookeeper_host>:ZooKeeper服务的主机名或IP地址。
  • <zookeeper_port>:ZooKeeper服务的端口号。

示例

bin/kafka-topics.sh --list --zookeeper localhost:2181

2. Kafka AdminClient API

Kafka的AdminClient API提供了编程方式来管理topic,包括获取topic列表。

Java示例代码

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.ListTopicsOptions;
import java.util.Collections;
import java.util.Properties;

Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); // Kafka集群地址
AdminClient admin = AdminClient.create(props);

ListTopicsOptions options = new ListTopicsOptions();
// 如果需要,可以设置options来过滤topics

admin.listTopics(options).names().whenComplete((names, exception) -> {
    if (exception == null) {
        names.forEach(System.out::println);
    } else {
        exception.printStackTrace();
    }
});
admin.close();

3. Kafka Consumer API

通过创建一个Kafka消费者,可以订阅一个空的主题列表,然后使用listTopics()方法获取所有主题的列表。

Java示例代码

import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.KafkaException;
import java.util.Collections;
import java.util.Set;
import java.util.Properties;

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "false");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
try {
    // 订阅空的主题列表
    consumer.subscribe(Collections.emptyList());
    // 获取主题列表
    Set<String> topics = consumer.listTopics();
    topics.forEach(System.out::println);
} catch (KafkaException e) {
    e.printStackTrace();
} finally {
    if (consumer != null) {
        consumer.close();
    }
}

注意事项

  • 确保你有权限访问Kafka集群。
  • 如果Kafka集群启用了安全特性,如SSL/TLS或SASL,需要在配置中添加相应的安全设置。
  • 使用AdminClient API时,记得在操作完成后关闭AdminClient以释放资源。

通过以上任一方法,你都可以获取Kafka中topic主题的列表。

标签:面试题,必问,20,ISR,领导者,追随者,Kafka,副本,列表
From: https://blog.csdn.net/2401_84542969/article/details/139408902

相关文章

  • 【一句日历】2024年06月
    【2023年6月1日·星期六】向着明亮那方,向着明亮那方。哪怕一片叶子,也要向着日光洒下的方向。灌木丛中的小草啊。向着明亮那方,向着明亮那方。哪怕烧焦了翅膀,也要飞向灯火闪烁的方向。夜里的飞虫啊。向着明亮那方,向着明亮那方。哪怕只是分寸的宽敞,也要向着阳光照射的方向。住在城......
  • 2024电影《美国内战》迅雷下载/中英文双字BD高清/720PMKV百度云下载
    美国内战,是一部关于美国历史上最为重要的战争之一的影片。在这部电影中,鲍威尔通过真实的历史事件和人物,再现了美国内战中的种种困境和挑战。《美国内战》的故事背景设定在1861年至1865年的美国内战时期。当时,北方和南方因为各自对待奴隶制度的立场分歧而爆发了战争......
  • 【2024-06-01】连岳摘抄
    23:59向着明亮那方,向着明亮那方。哪怕一片叶子,也要向着日光洒下的方向。灌木丛中的小草啊。向着明亮那方,向着明亮那方。哪怕烧焦了翅膀,也要飞向灯火闪烁的方向。夜里的飞虫啊。向着明亮那方,向着明亮那方。哪怕只是分寸的宽敞,也要向着阳光照射的方向。住在城市的孩子们啊!住在乡......
  • Visual Studio 2022创建C/C++项目
    没想到还有能用到C/C++的时候……刚好忘记怎么用VisualStudio了,写个博客记录一下 参考——https://blog.csdn.net/Long_xu/article/details/130599633https://learn.microsoft.com/zh-cn/visualstudio/extensibility/vsix/get-started/get-tools?view=vs-2022版本:VisualS......
  • 中国250米土体厚度栅格数据(2019年)
       土体厚度指的是地表以下土壤的垂直厚度,通常以米为单位进行测量。土体厚度的重要性在于它直接影响地表径流、地下水补给、土壤肥力以及植物根系分布等生态和环境因素。   本数据集是以250米分辨率制作的中国地区土体厚度栅格数据。每个像素的数值代表该区域内土......
  • 206. 反转链表
    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[] 提示:链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000 进阶:链表......
  • 莘默货期-短行动快-ABB-JOKAB 开关 2TLA020001R1000
    莘默(上海)自动化设备有限公司曹工150.0057.5786————————————————————————ABB-JOKAB标识符2TLA020070R2600ABB-JOKAB安全开关2TLA019995R4800ABB-JOKAB 开关 2TLA020001R1000ABB-JOKAB安全开关2TLA050056R2120ABB-JOKAB安全控制装置2......
  • 2023年亚太杯A题:果园采摘机器人的图像识别,一二题
    问题一:基于附件1中提供的可收获苹果的图像数据集,提取图像特征,建立数学模型,计算每幅图像中的苹果的数量,并绘制附件1中所有苹果的分布直方图。对于自动采摘机器人,首要的能力就是识别出苹果对象,因此如何从画面(图像)中准确的识别出苹果对象对于自动采摘机器人有重要影响。附件1给出......
  • 2024年6月--发奋图强
    是什么让我有了学习的动力,一个是我不想打王者了,一个是最近时间比较多,其实就是时间变多了最近时间,工作上确实没有比较硬的骨头,不必像以前一样啃VB,啃C#,找很多代码来看,很怀念以前的这种模式:找各种代码过来学习,每次看到一个新的功能就会如获致宝,觉得自己进步了,而......
  • [SDOI2008] Sue 的小球 题解
    题目描述首先将彩蛋按照横坐标从小到大排序,依次标号为\(1\simn\)。显然,\(Sue\)走过一段时间后,走过的点一定属于一段连续区间。所以本题采用区间\(dp\)。不妨先做一个简单转化,由于每个彩蛋初始高度确定,若想让总分最高,就要使扣分最少。所以下面的\(dp\)从扣分最少入手。设......