Kafka知识点记录

本文记录Kafka相关知识点,包括consumer订阅topic后,调用poll方法加入消费者组,Kafka分配partition并发送消息,consumer接收消息和提交offset。介绍了管理offset的自动和手动两种方式,还说明了消费者组中consumer对partition的分配规则及分区重新分配情况,最后提及ConsumerRecords获取消息的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka知识点记录

  • consumer订阅topic之后,当consumer调用poll(Long)方法的时候,会自动加入消费者组,然后Kafka为consumer分配partition,接着Kafka将partion中的消息发送给consumer,consumer接收partition中的消息,提交offset。

  • partition中的消息都有一个offset,offset是patition中消息的唯一标识符,它还表示consumer在partition中的位置。eg.如果提交的offset=5,表示consumer将接收offset=5的消息,offset=1,2,3,4的消息都认为已被消费。

  • 管理offset的两种方式:
    – 自动提交offset
    需要指定enable.auto.commit=true ,consumer调用poll(Long)方法,消息返回给用户时,消息被认为已消费,提交的offset=返回的最后一条消息的offset+1,consumer将会接收提交的offset的消息。
    – 手动提交offset
    手动提交offset与自动提交offset不同,需要指定enable.auto.commit=false,消息返回给用户时,消息此时不被认为已消费,也不会提交offset。想要提交offset需要调用commitSync或者commitAsync。

  • 有相同group.id的consumer属于同一消费者组,消费者组中的consumer会被均衡分配partition,partition只会分配给同一消费者组中的一个consumer。
    假设一个topic有8个partition,有一个消费者组,这个消费者组有4个consumer。那么一个consumer会有2个partition。
    eg.假如消费者组的1个consumer出问题,比如crash,分区会被重新分配,其中2个consumer分别有3个partition,另一个consumer有2个partition
    eg.假如消费者组新增4个consumer,分区会被重新分配,每个consumer有1个partition。
    eg.假如消费者组新增5个consumer,分区会被重新分配,其中4个consumer分别有1个partition,另一个consumer不会被分配partition。
    eg.假如新增一个消费者组,这个消费者组有4个consumer,分区会被重新分配,每个消费者组中的每个consumer会有1个partition。

  • ConsumerRecords:
    获取给定topic中的消息
    获取给定partition中的消息
    获取给定消息集中消息所在的partition

### Kafka 常见面试题及答案 #### 是否可以脱离 ZooKeeper 使用 Kafka? 不可以。Kafka 需要依赖于 ZooKeeper 来管理集群元数据以及协调各个 Broker 的状态。ZooKeeper 提供了一致性和可用性的保障,使得 Kafka 能够稳定运行并支持动态伸缩[^1]。 #### 如何在 Kafka 中实现延迟队列? 为了实现在特定时间之后才消费的消息机制——即所谓的“延迟队列”,通常的做法是在生产者端给每条消息附加一个表示到期时间的时间戳字段;消费者则通过自定义逻辑来判断当前获取到的消息是否已经达到了其设定的触发条件。另一种方法是利用 Kafka Streams 或 KSQL 进行窗口化操作,在此期间内暂存这些带有延时期望的消息直到满足相应的等待周期后再做进一步处理[^2]。 #### 发送一条消息时可以选择哪些参数? 当向 Kafka 主题发布新记录时,用户可以根据需求设置 `topic`(主题名称)、`partition`(分区编号)和 `key` (键值)。其中只有 topic 是必填项,而 partition 和 key 则允许为空,默认情况下会采用轮询策略自动分配至不同分区内存储该条目[^3]。 #### Kafka 的主要特性有哪些? - **高吞吐量**:即使是非常普通的硬件配置下也能达到极高的读写速度。 - **低延迟**:从生产者发出请求到达消费者接收之间仅有毫秒级甚至更短间隔。 - **可扩展性**:容易横向增加节点数量从而提升整体性能表现。 - **持久性**:所有接收到的数据都会先落地磁盘保存起来防止丢失。 - **容错性**:具备良好的故障恢复能力确保服务连续不间断运作。 - **高可靠性**:提供多种复制机制保护重要资料免受意外损害影响。 - **易于集成和使用**:API 设计友好简单易上手,与其他系统对接方便快捷[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值