• Kafka基本概念


    一、 Kafka数据怎么保障不丢失?

    一个是生产者端,一个消费者端,一个broker端。

    生产者数据的不丢失

    kafka在生产者里提供了消息确认机制,即可以通过配置来决定有几个副本收到消息,这条消息才算发送成功

    • ack=0:producer不等待broker同步完成的确认,继续发送下一条(批)信息。
    • ack=1(默认):producer要等待leader成功收到数据并得到确认,才发送下一条message
    • ack=-1:producer得到所有follwer确认,才发送下一条数据。

    消费者数据的不丢失

    通过offset commit 来保证数据的不丢失,kafka自己记录了每次消费的offset数值,下次继续消费的时候,会接着上次的offset进行消费。

    kafka集群中的broker数据不丢失

    每个broker中的partition我们一般都会设置有replication(副本)的个数,生产者写入的时候首先根据分发策略(有partition按partition,有key按key,都没有轮询)写入到leader中,follower(副本)再跟leader同步数据,这样有了备份,也可以保证消息数据的不丢失。

    二、kafka数据分区和消费者的关系?

    每个分区只能由同一个消费组内的一个消费者(consumer)来消费,可以由不同的消费组的消费者来消费,同组的消费者则起到并发的效果。Kafka中的数据的删除和是否消费没有关系,只跟kafka broker上的配置有关

    1. log.retention,hours=48 #数据最多保存48小时
    2. log.retention.byte=1073741824 #数据最多1G

    三、 kafka内部如何保证顺序,结合外部组件如何保证消费者的顺序?

    kafka只能保证partition内是有序的,但是partition间的有序是没办法的。爱奇艺的搜索架构,是从业务上把需要有序的打到同⼀个partition。

    四、kafka的消费者是pull()还是push()模式,这种模式有什么好处?

    Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到 broker,consumer 从broker 拉取消息。

    优点:pull模式消费者自主决定是否批量从broker拉取数据,而push模式在无法知道消费者消费能力情况下,不易控制推送速度,太快可能造成消费者奔溃,太慢又可能造成浪费。

    缺点:如果 broker 没有可供消费的消息,将导致 consumer 不断在循环中轮询,直到新消息到到达


    五、Kafka 的设计架构?

    • Producer :消息生产者,就是向 kafka broker 发消息的客户端。
    • Consumer :消息消费者,向 kafka broker 取消息的客户端。
    • Topic :可以理解为一个队列,一个 Topic 又分为一个或多个分区,
    • Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
    • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker上,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的id(offset)。将消息发给 consumer,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic 的整体(多个 partition 间)的顺序。
    • Segment :Partition在物理上由多个Segment数据文件组成,每个Segment数据文件都大小相等,按顺序读写
  • 相关阅读:
    Linux中的.bashrc文件
    input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传
    Openssl数据安全传输平台019:外联接口类的封装以及动态库的制作 - Bug未解决,感觉不是代码的问题
    windows server充当DHCP服务器与华为模拟器对接下发地址
    《MATLAB 神经网络43个案例分析》:第38章 基于Kohonen网络的聚类算法——网络入侵聚类
    java毕业设计计算机组成原理虚拟仿真实验系统mybatis+源码+调试部署+系统+数据库+lw
    手机如何开启开发者选项? (小米为例)
    Docker笔记-Debian容器内搭建ssh服务
    React TreeSelect设置默认展开项的方法
    Linux Chrome无法启动的原因(适用于Linux Edge)
  • 原文地址:https://blog.csdn.net/libaowen609/article/details/126695660