kafka学习

带着问题去学习

  1. zk在kafka中扮演什么作用?
  • 保存元数据,比如broker信息,分区信息,消费者的偏移量
  • leader选举
  • 集群监控,比如集群节点的健康检查
  1. kafka中leader挂掉,其他的follower是如何成为leader的?

  2. kafka中的消息传递语义

  • At most once - 消息可能丢失,但是不会重复发送
  • At least once - 消息不可能丢失,但是会重复
  • Exactly once - 每个消息仅仅传递一次
  1. 幂等性生产者
    Kafka 的幂等性生产者是为了确保相同的消息在同一个分区上只被写入一次而设计的。这样可以防止生产者在发送消息时因为一些网络问题或者其他错误导致消息的重复写入。幂等性生产者引入了一些机制来保证这一点:
  • Producer Id(生产者ID): 每个生产者实例都会被分配一个唯一的 Producer Id(PID)。这个 ID 在生产者的整个生命周期内是固定的,它用于标识消息是由哪个生产者发送的。Producer Id 会与一个 epoch(时期)结合,以确保即使生产者发生重新启动,也能够继续使用相同的 Producer Id。

  • Sequence Number(序列号): 每个消息都有一个单调递增的序列号,它是由生产者维护的。序列号的目的是为了确保消息的顺序和一致性。Kafka 使用 Producer Id 和 Sequence Number 来唯一标识一个消息。

  • Broker 端幂等性处理: Kafka 的 broker 端会检测到来自生产者的重复消息,并根据 Producer Id 和 Sequence Number 进行过滤。如果 broker 收到的消息具有相同的 Producer Id 和较小或相同的 Sequence Number,则它会认为这是一条重复消息,并将其过滤掉。

  • Acknowledge(应答机制): 幂等性生产者使用 ACK(应答机制)来确认消息是否成功写入到分区。如果消息在写入后收到了分区的 ACK,那么生产者会认为消息已经成功写入,否则会重试。这确保了消息的可靠性。

通过这些机制,Kafka 的幂等性生产者可以在面临网络故障、生产者重启等情况下,确保相同的消息不会被重复写入到同一个分区。这对于保证消息的一次性投递非常重要,特别是在涉及到事务性和精确一次性语义的场景中。

  1. kafka会不会丢失消息
    会丢失,broker、producer、consumer都可能会丢失消息
    https://zhuanlan.zhihu.com/p/307480336
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Kafka 官网: Kafka 主要设计目标如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 T...
    灯火gg阅读 787评论 0 2
  • kafka客户端 Kafka除了提供内置Java客户端外,还提供了二进制连接协议,即向Kafka网络端口发送适当的...
    零度沸腾_yjz阅读 2,921评论 0 4
  • 项目4月份发版,直接需要整合kafka,今天开始学,一个月内完成kafka的部分。 资料来源:http://www...
    MisterCH阅读 1,760评论 0 4
  • 生产者就是负责向kafka发送消息的应用程序 客户端开发 一个正常的生成逻辑需要具备一下几个步骤 (1) 配置生产...
    xiaogp阅读 502评论 0 0
  • MQ入门总结(六)Kafka的原理和使用 Kafka的架构原理,你真的理解吗? 真的,Kafka 入门一篇文章就够...
    John13阅读 207评论 0 0