《专题四 服务化改造》之《第三章 【补充资料】常见消息中间件应用详解》之《第十节 Kafka》

11 篇文章 0 订阅

《3.10.1 kafka入门和使用场景》

  • 简介:
    在这里插入图片描述
    附蓝卓数字科技面试中的问题: kafka的每个leader partition在哪个位置,是由谁决定的? A1 :

In the Kafka cluster, one of the brokers serves as the controller. The controller is responsible for managing the states of partitions and replicas and for performing administrative tasks like reassigning partitions. At any point in time, there can only be one controller in the cluster.

One of the quorum controllers acts as the leader and creates events in the metadata topic within Kafka. The other controllers within the quorum follow the leader controller by responding to these events.

  • 8 50 主流MQ对比:
    吞吐量 Kafka>RabbitMQ>ActiveMQ
    准确性 RabbitMQ>ActiveMQ>Kafka
    一般来说,数据场景用Kafka
    在这里插入图片描述
  • leader partition可读可写,follower partition只可读。
    数据被写到leader后,会同步到follower。leader如果挂了,follower们会有选举,原leader重新上线后会成为follower。

相关面试问题:kafka支持读写分离吗 (in浙大未来绿洲一面)
stackoverflow:What is a partition leader in Apache Kafka?

Every partition has exactly one partition leader which handles all the read/write requests of that partition. (update: from Kafka 2.4.0, consumers are allowed to read from replicas) …
Kafka guarantees that every partition replica resides on a different broker (whether if it’s the leader or a follower), so the maximum replication factor is the number of brokers in the cluster.

bing以及知乎:
原本kafka不支持读写分离,也就是说,只有leader副本可以提供读写服务,而follower副本只能同步数据。不过,kafka 2.4之后,提供了有限的读写分离,也就是说follower副本能够提供读服务,但是需要满足一些条件。
因为有了这样的适用场景,kafka存在多个数据中心,而数据中心存在于不同机房,当其中一个数据中心需要向另一个数据中心同步数据的时候,如果只能从首领副本进行数据读取的话,需要跨机房来完成,而这些流量带宽又比较昂贵,而利用本地跟随者副本进行消息读取就成了比较明智的选择。
所以kafka推出这一个功能,目的并不是降低broker的系统负载,分摊消息处理量,而是为了节约流量资源。
在broker端,需要配置参数 replica.selector.class,其默认配置为LeaderSelector,意思是:消费者从首领副本获取消息,改为RackAwareReplicaSelector,即消费者按照指定的rack id上的副本进行消费。还需要配置broker.rack参数,用来指定broker在哪个机房。
在consumer端,需要配置参数client.rack,且这个参数和broker端的哪个broker.rack匹配上,就会从哪个broker上去获取消息数据。

  • 59 40 可以指定往Kafka写数据成功的定义:比如往leader和follower都写成功
    在这里插入图片描述
    在这里插入图片描述

  • 76分 四个Kafka核心API:
    在这里插入图片描述

《3.10.2 Kafka Connect数据传输作业工具》

  • 3 40 record中的timestamp意义1:可用于决定它是否过期,以被删除;意义2:让消费者决定只消费指定时间的消息
  • 11 40 producer.send方法异步。原理:只先把消息发送至本地buffer。后台IO线程会将buffer中的数据批量发送(linger.ms默认为0,即实时发送而非批量发送,实时性好,但不利于提高吞吐量)
    在这里插入图片描述
    准确来说,ack=All是表示leader和所有的ISR副本同步完成。ISR:跟上了leader节奏的副本。可见于《3.10.3 Kafka Streams架构》76:30 以及2

acks=all This means the leader will wait for the full set of in-sync replicas to acknowledge the record

  • 27 50 Kafka的使用场景1:
    在这里插入图片描述
    31 20 一个partition只能被一个Consumer Group中的一个Consumer消费,决定了Kafka的消息顺序性比ActiveMQ和RabbitMQ好?

  • 34 16+ 使用场景2:
    在这里插入图片描述
    Kafka的数据存储与被消费无关

  • 49 19 使用场景3:ELK中使用,为Logstash削峰

  • 55 1+ 其它使用场景: 跟踪网站活动;流处理

《3.10.3 Kafka Streams架构》

  • 8 10 对于一个Consumer Group而言,一个partition只能被中的一个Consumer消费,但是一个Consumer可以消费多个partition。
    每个Consumer Group消费的是全量数据(topic的全量数据?我尚未在实践中证实)

  • 23 10+ commit
    48 30 consumer.poll方法的offset记录在消费者的内存中,commit时才会落地到Kafka中。
    要求强一致性时,建议在消费者本地保存offset记录
    在这里插入图片描述

《3.10.4 Kafka优雅应用》

  • Kafka为什么高效:
    • 顺序写磁盘。如下图,顺序写磁盘高于随机写内存:
      在这里插入图片描述

page cache用于缓存文件的页数据。

page cache的目的是加速数据I/O:写数据时首先写到缓存,将写入的页标记为dirty,然后向外部存储flush,也就是缓存写机制中的write-back(另一种是write-through,Linux未采用);读数据时首先读取缓存,如果未命中,再去外部存储读取,并且将读取来的数据也加入缓存

page cache中的数据会随着内核中…写回到磁盘,就算进程崩溃,也不用担心数据丢失。另外,如果consumer要消费的消息不在page cache里,才会去磁盘读取,并且会顺便预读出一些相邻的块放入page cache,以方便下一次读取。

在这里插入图片描述
41 40 零拷贝的示意图如下。Kafka有用到Netty?
在这里插入图片描述
关于零拷贝可对照参考面试被问如何设计RPC框架,Java程序媛在线秃头中的以下评论:
在这里插入图片描述

  • 总体概括Kafka高效的原因:
    在这里插入图片描述

  • 26 20 消费端。推的优点:实时;缺点:可能超过消费者的接收处理速度。Kafka使用的是拉(poll)

  • 51 50 添加partition的命令

  • 56 30 在各节点上重新分配partition的脚本,比如节点数变化时需要

  • 65 35+ Kafka如何做到不丢数据,甚至exactly once:
    Consumer: 如上一节所记,在Consumer本地保存offset记录
    Broker: 高可用。注意replic数和IRS数的设置
    Producer: acks=all,另外注意设置retries,即重试次数。但是可能会导致消息重复,为了解决重复消息的问题,设置唯一id?

  • 75 35+ kafka在生产环境遭遇业务区网卡流量激增的应对方案:多网卡,让消费端从数据区连过来,从而走数据区的交换机


  1. Kafka’s Shift from ZooKeeper to Kraft ↩︎

  2. https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_23204557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值