Kafka的介绍

本周我们很开心邀请到Xing Wang给我们带来了《Kafka的介绍》的演讲,参与人数突破史高达到220+人,感谢大家的参与,相关总结如下:

Slides

  1. Xing Wang使用的slides

Q&A

感谢张程给我们整理的笔记。

也感谢Nancy和琅琊王伯舆提供的自己的笔记供整理参考。

Kafka、RabbitMQ、RocketMQ 之间的区别是什么 ?

  1. 讲座中没有特别讨论这个方面,我们后期整理了一些相关资料供大家参考, 简单来说:
    • 如果消息队列不是将要构建系统的重点,对消息队列功能和性能没有很高的要求,只需要一个快速上手易于维护的消息队列,建议使用 RabbitMQ。
    • 如果系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,需要低延迟和高稳定性,建议使用 RocketMQ。
    • 如果需要处理海量的消息,像收集日志、监控信息或是埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合的消息队列。
  1. 【扩展】该如何选择消息队列?知乎上关于这几个消息队列的对比
  2. 【扩展】RocketMQ官方关于三者的比较。
  3. 【扩展】多维度对比5款主流分布式MQ消息队列,多个维度对五款主流的MQ进行了比较,值得大家参考。
  4. 【扩展】Zuqing Li推荐的一款和Kafka兼容的替代产品,供大家参考。

同步异步和阻塞非阻塞是相同的概念吗?

  1. 总的来说同步也是可以非阻塞的,具体可以参考下面的扩展阅读。
  2. 【扩展】NIO编程(同步阻塞与同步非阻塞详解):详细介绍了他们的相关概念和区别。
  3. 【扩展】【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章:相关概念讲解得很清楚。
  4. 【扩展】Java NIO浅析:美团技术团队从来没有让人失望。
  5. 【扩展】Introduction to Akka Actors in Java:Non-blocking的一个实际应用Actor,正好和我们之前群里讨论的内容想符合。
  6. 【扩展】阻塞非阻塞与同步异步的区别是什么?leetcode上的讨论。

Kafka是否必须依赖zookeeper?

  1. 根据官方资料介绍,Apache Kafka 3.0 引入了各种新功能、突破性的 API 更改以及对 KRaft 的改进——Apache Kafka 的内置共识机制将取代 Apache ZooKeeper™。虽然 KRaft 尚未被推荐用于生产,但对 KRaft 元数据和 API 进行了许多改进。Exactly-once 和分区重新分配支持值得强调。鼓励大家查看 KRaft 的新功能并在开发环境中试用它。
  2. 【扩展】Kafka’s New Control Plane: The Quorum Controller:官方对Quorum controller的介绍。
  3. 【扩展】深度解读:Kafka 放弃 ZooKeeper,消息系统兴起二次革命:InfoQ上关于KRaft的讨论。
  4. 【扩展】官方相关release的总结。
  5. 【扩展】东哥关于KRaft的介绍。

Kafka 3.0版本中consumer group可以从follower中(不一定是leader)读取数据,这种情况下如何避免数据不一致?如何解决数据同步问题?

  1. 引入follower读的目的是为了避免read QPS太大,解决延时问题。Follower可以理解成consumer,用watermark来保持数据同步,保持全局的offset就可以读出正确的数据
  2. 【扩展】Kafka设计解析(二十一)Kafka水位(high watermark)与leader epoch的讨论:这篇文章解析的非常详细了。
  3. 【扩展】Kafka进阶之Replication:东哥也有相关的解释供大家参考。
  4. 【扩展】什么,kafka能够从follower副本读数据了 —kafka新功能介绍:这篇文章对Kafka从follower读进行了详细解释。

Message是push到consumers(包括followers), 还是consumers(followers)去pull呢?

  1. 在Kafka中使用的是pull的机制。
  2. 【扩展】Apache Kafka中Follower如何与Leader同步数据:详细介绍了follower的pull机制。
  3. 【扩展】kafka同步数据机制:很详细介绍了相关流程。

Kafka为什么能够有高的速度

  1. 总得来说有很多方面来提升Kafka的速度:
    • Maximized use of sequential disk reads and writes
    • Zero-copy processing of messages
    • Use of Linux OS page cache rather than Java heap for caching
    • Partitioning of topics across multiple brokers in a cluster
    • Smart client libraries that offload certain functions from the brokers
    • Batching of multiple published messages to yield less frequent network round trips to the broker
    • Support for multiple in-flight messages
    • Prefetching data into client buffers for faster subsequent requests.
  2. 【扩展】Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines):很不错的benchmark
  3. 【扩展】Kafka为什么吞吐量大、速度快?从各个方面介绍Kafka的速度快的原因。
  4. 【扩展】为什么 Kafka 速度那么快?
  5. 【扩展】一口气说出Kafka为啥这么快?还是介绍得蛮全面的。

吞吐量和broker/partition的关系在实际配置中如何选择呢?怎么判断需要多少台机器多少broker?

  1. 具体大家可以参考下面的扩展阅读。
  2. 【扩展】kafka分区数设置多少合适:一些实战参数的配置。
  3. 【扩展】如何选择Kafka的分区数和消费者个数:介绍了一些个数选择的方法。
  4. 【扩展】如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端:大家可以参考。

一些扩展问题和思考

  1. In-Sync Replica的配置和数据丢失tolerance的问题: 可以参考Kafka进阶之Replication
  2. 一个Consumer Group可以consume from 一个topic的多个partition吗?可以的,可以参考这篇文章:Kafka基础介绍之consumers
  3. Kafka能否做到Exactly-Once:能够做到,可以参考这篇文章:Exactly-Once Semantics Are Possible: Here’s How Kafka Does It
  4. 一个consumer group 可以消费多个topics 吗?任一个consumer group 可以消费任一个topic ?可以的,可参考这个讨论
  5. Partition过多性能会下降? 知乎有关于这个问题的讨论。CSDN上也有一篇文章对此有介绍。
  6. Kafka可以像一个application那样被scale吗?如果可以,步骤是什么呢? 可以参考这篇扩容方法
  7. Kafka相关配置的介绍。大家可以参考下面这篇Kafka 配置文件详情,以及30个Kafka常见错误小集合来理解。
  8. Kafka如何做real-time的analysisRockset Enhances Kafka Integration to Simplify Real-Time Analytics on Streaming Data
  9. Kafka的一个商业环境实战系列介绍,大家可以参考
  10. 东哥关于Kafka的系列介绍(带个货,哈哈)。

再次感谢大家的参与,也希望大家有好的资源能联系我更新这篇文章。谢谢大家。

下周话题安排和往期话题回顾敬请参见《系统设计开荒小分队话题讨论简介

You may also like...

Leave a Reply

Your email address will not be published.