当前位置: 首页 > news >正文

kafka消费者如何读同一生产者消息_Kafka(1)-获取主题,生产者消费者,推拉,主从,与MQ区别,ack机制(1-11,共18)...

你好,这期我要和您分享的是面试--Kafka篇(1-11个问题,共18个问题)

在上期当中,我们学习了:

18 zk 节点宕机如何处理?

19 zookeeper 负载均衡和 nginx 负载均衡区别

20 Zookeeper 有哪几种几种部署模式?

21 集群最少要几台机器,集群规则是怎样的?

22 集群支持动态添加机器吗?

23 Zookeeper 对节点的 watch 监听通知是永久的吗?为什么不是永久的?

24 Zookeeper 的 java 客户端都有哪些?

25 chubby 是什么,和 zookeeper 比你怎么看?

26 说几个 zookeeper 常用的命令。

27 ZAB 和 Paxos 算法的联系与区别?

28 Zookeeper 的典型应用场景

本期我们来学习:

1、如何获取 topic 主题的列表

2、生产者和消费者的命令行是什么?

3、consumer 是推还是拉?

4、讲讲 kafka 维护消费状态跟踪的方法

5、讲一下主从同步

6、为什么需要消息系统,mysql 不能满足需求吗?

7、Zookeeper 对于 Kafka 的作用是什么?

9、Kafka 判断一个节点是否还活着有那两个条件?

10、Kafka 与传统 MQ 消息系统之间有三个关键区别

11、讲一讲 kafka 的 ack 的三种机制

那我们正式开始学习吧。

1、如何获取 topic 主题的列表

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

2、生产者和消费者的命令行是什么?

生产者在主题上发布消息:

bin/kafka-console-producer.sh --broker-list 192.168.43.49:9092 --topicHello-Kafka

注意这里的 IP 是 server.properties 中的 listeners 的配置。接下来每个新行就是输入一条新消息。

消费者接受消息:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topicHello-Kafka --from-beginning

3、consumer 是推还是拉?

Kafka 最初考虑的问题是,customer 应该从 brokes 拉取消息还是 brokers 将消息推送到 consumer,也就是 pull 还 push。在这方面,Kafka 遵循了一种大部分消息系统共同的传统的设计:producer 将消息推送到 broker,consumer 从broker 拉取消息。

一些消息系统比如 Scribe 和 Apache Flume 采用了 push 模式,将消息推送到下游的

consumer。这样做有好处也有坏处:由 broker 决定消息推送的速率,对于不同消费速率的 consumer 就不太好处理了。消息系统都致力于让 consumer 以最大的速率最快速的消费消息,但不幸的是,push 模式下,当 broker 推送的速率远大于 consumer 消费的速率时,consumer 恐怕就要崩溃了。最终 Kafka 还是选取了传统的 pull 模式。

Pull 模式的另外一个好处是 consumer 可以自主决定是否批量的从 broker 拉取数据 。Push 模式必须在不知道下游 consumer 消费能力和消费策略的情况下决定是立即推送每条消息还是缓存之后批量推送。如果为了避免 consumer 崩溃而采用较低的推送速率,将可能导致一次只推送较少的消息而造成浪费。Pull 模式下,consumer 就可以根据自己的消费能力去决定这些策略。

Pull 有个缺点是,如果 broker 没有可供消费的消息,将导致 consumer 不断在循环中轮询,直到新消息到 t 达。为了避免这点,Kafka 有个参数可以让 consumer阻塞知道新消息到达(当然也可以阻塞知道消息的数量达到某个特定的量这样就可以批量发送)。

4、讲讲 kafka 维护消费状态跟踪的方法

大部分消息系统在 broker 端的维护消息被消费的记录:一个消息被分发到consumer 后 broker 就马上进行标记或者等待 customer 的通知后进行标记。这样也可以在消息在消费后立马就删除以减少空间占用。

但是这样会不会有什么问题呢?如果一条消息发送出去之后就立即被标记为消费过的,旦 consumer 处理消息时失败了(比如程序崩溃)消息就丢失了。为了解决这个问题,很多消息系统提供了另外一个个功能:当消息被发送出去之后仅仅被标记为已发送状态,当接到 consumer 已经消费成功的通知后才标记为已被消费的状态。这虽然解决了消息丢失的问题,但产生了新问题,首先如果 consumer处理消息成功了但是向 broker 发送响应时失败了,这条消息将被消费两次。第二个问题时,broker 必须维护每条消息的状态,并且每次都要先锁住消息然后更改状态然后释放锁。这样麻烦又来了,且不说要维护大量的状态数据,比如如果消息发送出去但没有收到消费成功的通知,这条消息将一直处于被锁定的状态,Kafka 采用了不同的策略。Topic 被分成了若干分区,每个分区在同一时间只被一个 consumer 消费。这意味着每个分区被消费的消息在日志中的位置仅仅是一个简单的整数:offset。这样就很容易标记每个分区消费状态就很容易了,仅仅需要一个整数而已。这样消费状态的跟踪就很简单了。

这带来了另外一个好处:consumer 可以把 offset 调成一个较老的值,去重新消费老的消息。这对传统的消息系统来说看起来有些不可思议,但确实是非常有用的,谁规定了一条消息只能被消费一次呢?

5、讲一下主从同步

Kafka允许topic的分区拥有若干副本,这个数量是可以配置的,你可以为每个topci配置副本的数量。Kafka会自动在每个个副本上备份数据,所以当一个节点down掉时数据依然是可用的。

Kafka的副本功能不是必须的,你可以配置只有一个副本,这样其实就相当于只有一份数据。

6、为什么需要消息系统,mysql 不能满足需求吗?

(1)解耦:

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

(2)冗余:

消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。

(3)扩展性:

因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。

(4)灵活性 & 峰值处理能力:

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

(5)可恢复性:

系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

(6)顺序保证:

在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。(Kafka 保证一个 Partition 内的消息的有序性)

(7)缓冲:

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

(8)异步通信:

很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

7、Zookeeper 对于 Kafka 的作用是什么?

Zookeeper 是一个开放源码的、高性能的协调服务,它用于 Kafka 的分布式应用。

Zookeeper 主要用于在集群中不同节点之间进行通信

在 Kafka 中,它被用于提交偏移量,因此如果节点在任何情况下都失败了,它都可以从之前提交的偏移量中获取除此之外,它还执行其他活动,如: leader 检测、分布式同步、配置管理、识别新节点何时离开或连接、集群、节点实时状态等等。

8、数据传输的事务定义有哪三种?

和 MQTT 的事务定义一样都是 3 种。

(1)最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输

(2)最少一次: 消息不会被漏发送,最少被传输一次,但也有可能被重复传输.

(3)精确的一次(Exactly once): 不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的

9、Kafka 判断一个节点是否还活着有那两个条件?

(1)节点必须可以维护和 ZooKeeper 的连接,Zookeeper 通过心跳机制检查每个节点的连接

(2)如果节点是个 follower,他必须能及时的同步 leader 的写操作,延时不能太久

10、Kafka 与传统 MQ 消息系统之间有三个关键区别

(1).Kafka 持久化日志,这些日志可以被重复读取和无限期保留

(2).Kafka 是一个分布式系统:它以集群的方式运行,可以灵活伸缩,在内部通过复制数据提升容错能力和高可用性

(3).Kafka 支持实时的流式处理

11、讲一讲 kafka 的 ack 的三种机制

request.required.acks 有三个值 0 1 -1(all)

0:生产者不会等待 broker 的 ack,这个延迟最低但是存储的保证最弱当 server 挂掉的时候就会丢数据。

1:服务端会等待 ack 值 leader 副本确认接收到消息后发送 ack 但是如果 leader挂掉后他不确保是否复制完成新 leader 也会导致数据丢失。

-1(all):服务端会等所有的 follower 的副本受到数据后才会受到 leader 发出的ack,这样数据不会丢失

好了,本期我们学习了:

1、如何获取 topic 主题的列表

2、生产者和消费者的命令行是什么?

3、consumer 是推还是拉?

4、讲讲 kafka 维护消费状态跟踪的方法

5、讲一下主从同步

6、为什么需要消息系统,mysql 不能满足需求吗?

7、Zookeeper 对于 Kafka 的作用是什么?

9、Kafka 判断一个节点是否还活着有那两个条件?

10、Kafka 与传统 MQ 消息系统之间有三个关键区别

11、讲一讲 kafka 的 ack 的三种机制

希望对你有所帮助,我们下期再见

坚持学习,加油

相关文章:

  • troublemaker中文谐音_|音译|140830*歌词ΓTrouble Maker - Trouble Maker
  • axure8.0 上下移动 移动端_Axure8.0|移动端上下滑动不出屏
  • adb push文件到手机_adb命令实战
  • c#三个数从小到大排序_程序猿面试宝典:你该知道的数组排序算法
  • 联通物联卡为什么没有网络_联通物联卡突然没有信号,试着用这几方法!
  • 高一信息技术练习软件_高一新生必读:珍惜新起点,迎接新挑战——高一新生如何面对高中生活?...
  • ffmpeg 转换flv压缩大小_用FFMPEG SDK进行视频转码压缩时解决音视频不同步问题的方法(转)...
  • vuex异步获取数据_vuex起步 (三、异步管理数据)
  • python处理考勤数据txt文件_腾讯课堂考勤助手:一款自动化考勤数据处理工具
  • conda create出现连接问题_网络连接出现问题,苹果HomePod mini出现故障门
  • 启动不了 驱动程序签字功能_电脑的蓝牙功能您用了吗?不识别蓝牙和蓝牙搜索不到设备怎么办?...
  • cwntos新建目录挂载磁盘_怎么初始化你的 Linux 新磁盘?
  • dataframe for循环 筛选_Python:编写地道循环的两个建议,轻松应对新需求
  • 套用带标题行的表格样式_计算机二级通关攻略??必背考点 知识点整理 带你稳过计算机二级...
  • 城市运行一网统管_白鹤镇:聚焦“一网统管”建设,助力城市精细化管理
  • Apache Spark Streaming 使用实例
  • CentOS 7 防火墙操作
  • fetch 从初识到应用
  • Java 内存分配及垃圾回收机制初探
  • Java 网络编程(2):UDP 的使用
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript 一些 DOM 的知识点
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PhantomJS 安装
  • sessionStorage和localStorage
  • SQLServer插入数据
  • vuex 笔记整理
  • 关于使用markdown的方法(引自CSDN教程)
  • 记录一下第一次使用npm
  • 聊聊flink的TableFactory
  • 删除表内多余的重复数据
  • 算法之不定期更新(一)(2018-04-12)
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • zabbix3.2监控linux磁盘IO
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​configparser --- 配置文件解析器​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ###STL(标准模板库)
  • #QT项目实战(天气预报)
  • $GOPATH/go.mod exists but should not goland
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (09)Hive——CTE 公共表达式
  • (2022 CVPR) Unbiased Teacher v2
  • (八)Flask之app.route装饰器函数的参数
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (蓝桥杯每日一题)love
  • (三)uboot源码分析
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)人的集合论——移山之道
  • ***检测工具之RKHunter AIDE
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)