18道kafka高频面试题(附答案)

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

3、consumer 是推还是拉?

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

5、讲一下主从同步

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

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

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

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

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

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

12、消费者如何不自动提交偏移量,由应用提交?

13、消费者故障,出现活锁问题如何解决?

14、如何控制消费的位置

15、kafka 分布式(不是单机)的情况下,如何保证消息的顺序消费?

16、kafka 的高可用机制是什么?

17、kafka 如何减少数据丢失

18、kafka 如何不消费重复数据?比如扣款,我们不能重复的扣。

题目及答案


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 决定消息推送的速率ÿ

### 关于Kafka的常见面试问题及答案 #### 面试问题一:什么是 Apache Kafka? Apache Kafka是一个分布式的流处理平台,用于构建实时数据管和流应用。其核心功能包括发布和订阅记录流、存储记录流以及处理记录流的能力[^1]。 #### 面试问题二:为什么选择使用 Kafka 而不是传统的消息队列系统? 与传统消息系统相比,Kafka具有三大显著特点: - **持久化日志**:Kafka的日志可以被重复读取并长期保存。 - **分布式架构**:支持集群部署模式下的弹性扩展,并通过数据复制提高容错率和高可用性。 - **实时流处理能力**:不仅限于简单的消息传递,还具备强大的流式数据分析处理能力[^4]。 #### 面试问题三:如何保证 Kafka 中的数据不丢失? 为了防止数据丢失,Kafka采用了多种策略来保障数据的安全性和可靠性。其中包括但不限于设置合理的`acks`参数控制生产者发送确认机制;利用ISR(In-Sync Replicas)列表管理副本同步状态;配置最小同步副本数量(`min.insync.replicas`)等措施确保即使遇到硬件故障或网络异常也能保持业务连续性[^2]。 #### 面试问题四:解释一下 Producer 的事务特性? Producer端引入了事务API以解决跨分区提交场景下可能出现的一致性问题。具体来说就是当同一个Producer实例重启后再次连接到Broker时,由于之前分配给它的PID已经被回收重用了,因此需要借助事务ID来进行唯一标识从而实现幂等性的写入操作。此外,还可以配合Consumer Group Offset Commit API完成精确一次语义传输[^3]。 ```python from kafka import KafkaProducer producer = KafkaProducer(transactional_id='my_transaction') try: producer.begin_transaction() future = producer.send('topic_name', b'message_value') result = future.get(timeout=60) producer.commit_transaction() except Exception as e: print(f"Transaction failed: {e}") producer.abort_transaction() finally: producer.close() ``` #### 面试问题五:谈谈你对 Kafka 日志聚合的理解? Kafka日志聚合是指从不同来源的服务中收集日志信息的过程。这种技术允许开发者将分散在整个企业环境里的各种类型的日志统一起来进行分析。通常情况下,这类解决方案会涉及多个组件共同协作完成整个流程——比如Flume负责采集原始日志文件,而Logstash则用来解析转换成结构化的JSON对象之后再推送到目标Topic供下游消费程序进一步加工处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值