设为首页 加入收藏

TOP

kafka:经典问题汇总
2019-04-20 02:19:52 】 浏览:61
Tags:kafka 经典 问题 汇总

1.kafka节点之间如何备份?

Kafka允许用户为每个topic设置副本数量,副本数量决定了有几个broker来存放写入的数据。如果你的副本数量为3,那么一份数据就会被存放在3台不同的机器上,在所有备份节点中,有一个节点作为leader节点,这个节点保存了其它备份节点列表,并维持各个备份间的状态同步。
副本以topic的分区为单位。在正常情况下,kafka每个分区都有一个单独的leader,0个或者多个follower。副本的总数包括leader。所有的读取和写入到该分区的leader。通常,分区数比broker多,leader均匀分布在broker。Follower的日志完全等同于leader的日志,相同的顺序相同的偏移量和消息。(当然,在任何一个时间点上,leader比follower多几条消息,尚未同步到follower)
Follower作为普通的消费者从leader中消费消息并应用到自己的日志中。

并允许follower从leader拉取批量日志应用到自己的日志,这样具有良好的性能。

2.kafka消息是否会丢失?为什么?

消息不是特殊情况并不会丢失,在Producer端,当一个消息被发送后,producer会等待broker成功接收到消息的反馈ack(可通过参数控制等待时间),如果消息在途中丢失或是其中一个broker挂掉,producer会重新发送(可以通过参数控制是否等待所有备份节点都收到消息)
在Consumer端看,broker端记录了partition中的一个offset值,这个值指向Consumer下一个即将消费message。当consumer收到了消息,但在处理过程中挂掉,此时consumer可以通过这个offset值重新找到上一个消息再进行处理,consumer还有权限控制这个offset值,对持久化到broker端的消息做任意处理

3.kafka的leader选举机制是什么?

kafka动态维护了一个同步状态的副本合集,简称ISR,在这个集合中的节点都是和leader保持高度一致,任何一条消息必须被这个集合中的每个节点读取并追加到日志中,才会通知外部这个消息已经被提交了。

因此这个集合中任何一个节点随时都可以被选为leader。

ISR在Zookeeper中维护。

ISR中有f+1个节点,就可以允许在f个节点down掉的情况下不会丢失消息并正常提供服务。

ISR的成员是动态的,如果一个节点被淘汰了,当它重新达到“同步中”的状态时,他可以重新加入ISR,这种leader的选择方式是非常快速的,适合kafka的应用场景。

4.kafka的消息保证有几种方式?

有多种可能的消息传递保证可以提供:
At most once—Messages may be lost but are never redelivered.
最多一次 — 消息可能丢失,但绝不会重发。
At least once—Messages are never lost but may be redelivered.
至少一次 — 消息绝不会丢失,但有可能重新发送。
Exactly once—this is what people actually want, each message is delivered once and only once.
正好一次 — 这是人们真正想要的,每个消息传递一次且仅一次

kafka默认是保证“至少一次”传递,并允许用户通过禁止生产者重试和处理一批消息前提交它的偏移量来实现 “最多一次”传递。而“正好一次”传递需要与目标存储系统合作,但kafka提供了偏移量,所以实现这个很简单

原文参考:https://blog.csdn.net/m0_37587447/article/details/78593244

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇kafka如何获取所有topic   .. 下一篇kafka的特点和优势

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目