Kafka入门
一、Kafka简介
- Kafka是什么
Apache Kafka 是一款开源的消息引擎系统。消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。 - 待传输消息的格式:使用的是纯二进制的字节序列,消息还是结构化的,只是在使用之前都要将其转换成二进制的字节序列。
- 传输协议:点对点模型、发布 / 订阅模型
- Kafka的分区和副本简介
Kafka中的分区机制指的是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中。
生产者总是向领导者副本写消息,而消费者总是从领导者副本读消息。每个分区下可以配置若干个副本,其中只能有 1 个领导者副本和 N-1 个追随者副本。 - Kafka使用消息日志(Log)来保存数据,一个日志就是磁盘上一个只能追加写(Append-only)消息的物理文件。一个日志又进一步细分成多个日志段,消息被追加写到当前最新的日志段中,当写满了一个日志段后,Kafka 会自动切分出一个新的日志段,并将老的日志段封存起来。Kafka 在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的。
- 为什么Kafka不支持主从读写分离
huxihx的回答
二、Kafka的发行版
- Apache Kafka,也称社区版 Kafka。优势在于迭代速度快,社区响应度高,使用它可以让你有更高的把控度;缺陷在于仅提供基础核心组件,缺失一些高级的特性。
- Confluent Kafka,Confluent 公司提供的 Kafka。优势在于集成了很多高级特性且由 Kafka 原班人马打造,质量上有保证;缺陷在于相关文档资料不全,普及率较低,没有太多可供参考的范例。
- CDH/HDP Kafka,大数据云公司提供的 Kafka,内嵌 Apache Kafka。优势在于操作简单,节省运维成本;缺陷在于把控度低,演进速度较慢。
三、Kafka的版本演进
- 0.7版本,最基础的消息队列功能
- Kafka 从 0.7 时代演进到 0.8 之后正式引入了副本机制,至此 Kafka 成为了一个真正意义上完备的分布式高可靠消息队列解决方案,这个版本需要指定 ZooKeeper 的地址。0.8.2.0 版本社区引入了新版本 Producer API,即需要指定 Broker 地址的 Producer。
- 0.9 大版本增加了基础的安全认证 / 权限功能,同时使用 Java 重写了新版本消费者 API,另外还引入了 Kafka Connect 组件用于实现高性能的数据抽取。
- 0.10.0.0 是里程碑式的大版本,因为该版本引入了 Kafka Streams。
- 0.11.0.0 版本,引入了两个重量级的功能变更:一个是提供幂等性 Producer API 以及事务(Transaction) API;另一个是对 Kafka 消息格式做了重构。
- 1.0 和 2.0 版本,这两个大版本主要还是 Kafka Streams 的各种改进。如果是 Kafka Streams 的用户,至少选择 2.0.0 版本。