如果MQ没有类似数据库事务结构和保证,是不可能达到消息投递100%可靠的,极端情况下消息投递要么丢失或重复。
下面咋们从producer,broker,consumer的角度分析一下Kafka中会出现哪些情况:
1.producer发送消息到Broker
目前生产者发送消息(request.required.acks)有三种方式。
acks = 0: producer不会等待broker发送ack ,因为发送消息网络超时或broker crash(1.Partition的Leader还没有commit消息 2.Leader与Follower数据不同步),既有可能丢失也可能会重发。
acks = 1: 当leader接收到消息之后发送ack,丢会重发,丢的概率很小
acks = -1: 当所有的follower都同步消息成功后发送ack. 丢失消息可能性比较低。
2.Consumer从Broker拉取消息
Kafka中有两种consumer接口,分别为Low-level API和High-levelAPI
(1). Low-level API SimpleConsumer
这套接口比较复杂的,使用者必须要考虑很多事情,优点就是对Kafka可以有完全的控制。
(2). High-level API ZookeeperConsumerConnector
High-level API使用比较简单,已经封装了对partition和offset的管理,默认是会定期自动commit offset,这样可能会丢数据的,因为consumer可能拿到数据没有处理完crash。 High-level API接口的特点,自动管理,使用简单,但是对Kafka的控制不够灵活。
3. Broker分析
(1). 对于broker,落盘的数据,除非磁盘坏了,一般不会丢的。
(2). 对于内存脏(没有flush磁盘)数据,broker重启会丢.
可以通过log.flush.interval.messages和log.flush.interval.ms来配置flush间隔,interval大丢的数据多些,小会影响性能
但在0.8.x版本以后,可以通过replica机制保证数据不丢,代价就是需要更多资源,尤其是磁盘资源,kafka当前支持GZip和Snappy压缩,来缓解这个问题。
是否使用replica取决于在可靠性和资源代价之间的平衡。
总结
Kafka只是能保证at-least once消息语义,即数据是可能重复的,这个在应用上需要可以容忍,
对于Kafka consumer,一般情况下推荐使用high-level API接口,最好不要直接使用low-level API,自己写起来比较麻烦和困难。
相关推荐
10. **Kafka的使用场景**:Kafka广泛应用于日志聚合、用户行为追踪、流式计算、实时分析以及消息传递等场景。 11. **性能优化**:Kafka可以通过调整各种参数,如缓冲区大小、批量大小、并行度等,来优化性能。同时...
它的设计目标是提供高吞吐量、低延迟的消息传递,同时保证数据的可靠性和持久性。Kafka的特点包括: 1. 高性能:Kafka能够处理每秒数十万条消息,使其成为大数据实时处理的理想选择。 2. 分布式:Kafka的数据分布在...
测试Kafka的性能和稳定性对于确保系统的可靠性和可扩展性至关重要。 要使用这个JMeter的Kafka扩展,首先需要将ApacheJMeter_kafka-0.2.2.jar文件复制到JMeter的lib/ext目录下。lib/ext目录是JMeter加载所有外部JAR...
Kafka的核心特性包括高性能、可扩展性、持久性和可靠性,使其成为现代大数据生态系统中的关键组件之一。 #### 设置Apache Kafka集群 在设置Apache Kafka集群之前,需要了解其架构和组成部分: - **Broker**:Kafka...
它的核心设计目标是提供高吞吐量、低延迟的消息传递,同时保证消息的可靠性和顺序性。Kafka 的源码分析有助于深入理解其内部机制,从而更好地利用和优化它。 1. **消息模型** Kafka 将数据存储在主题(Topic)中,...
### Apache Kafka 关键知识点...通过以上资源和实践步骤,可以全面了解 Apache Kafka 的功能和优势,并能够在实际项目中成功应用 Kafka 进行数据流处理和消息传递。无论是开发人员还是运维工程师,都能够从中受益匪浅。
它提供了一系列关键特性,包括可扩展性、高性能、高可靠性和灵活性。从概念上讲,Kafka类似于一种发布-订阅消息系统。 - **起源与发展历程**: - Kafka最初由LinkedIn创建。 - 2012年捐赠给了Apache软件基金会。 ...
- **持久化**:Kafka将消息存储在磁盘上,并提供多个副本以确保数据的可靠性。 - **分区与复制**:消息被分到不同的主题(topics)下,每个主题进一步划分为多个分区,每个分区都有一个主副本和多个备份副本,以...
这个版本的Kafka提供了可靠的消息传递系统,支持大规模数据集成、实时流处理和构建实时数据管道。Kafka的主要特点包括高吞吐量、持久化、分区和复制,使其成为大数据领域中的关键组件。 一、入门 1. **Apache ...
消息系统使用的原因通常包括解耦系统组件、提高系统可伸缩性、提供可靠的消息传递等。 第二章深入介绍了Kafka的核心内容。Kafka是一个分布式流媒体平台,最初由LinkedIn公司构建,目的是为了解决其后台系统中消息...
《Learning Apache Kafka》第二版是一本全面介绍Apache Kafka消息传递系统的书籍,作者为Nishant Garg。本书由Packt Publishing在2015年2月出版,ISBN号为978-1-78439-309-0。全书分为多个章节,旨在帮助读者从零...
2. **持久性**:消息被写入磁盘,并且在默认配置下,Kafka 会为每个分区保留一定时间或达到一定大小后才会删除,确保数据可靠性。 3. **容错性**:通过副本机制,Kafka 可以在broker 故障时自动恢复服务,保证系统...
3. **持久化**:Kafka 将消息持久化到磁盘,支持数据备份和恢复,提高系统的可靠性。 4. **可扩展性**:通过添加更多的 broker 实现水平扩展,以应对更大的数据量和更高的并发。 5. **容错性**:通过复制机制,当...
4. **消息队列**:Kafka也可以作为消息队列使用,提供可靠的消息传递和解耦功能。 5. **流式应用**:Kafka Streams API允许在Kafka内直接编写流处理应用程序,无需额外的处理框架。 在实践中,理解Kafka的特性和...
4. **持久性和容错性**:Kafka将消息存储在磁盘上,并支持数据复制,确保了数据的安全性和可靠性。 5. **灵活的消息分发机制**:Kafka支持发布/订阅模型以及点对点模型,允许用户根据需求选择合适的消息传递模式。 ...
开发者可以通过阅读源码学习Kafka如何实现高吞吐量的消息传递,以及如何设计分布式系统。 接下来,`说明.txt`文件可能包含了如何使用这些资源的指南。它可能会包含如何编译和运行Kafka的步骤,配置参数的解释,以及...
Apache Kafka 是一个高吞吐量的分布式消息系统,最初由 LinkedIn 开发并用于构建其活动流及运营数据处理管道的基础架构。随着时间的推移,Kafka 已经被广泛应用于多种不同的公司与场景中,成为数据管道和消息传递的...
在大数据领域,Apache Kafka作为一个分布式流处理平台,因其高效、可扩展和高吞吐量的特点,被广泛应用于实时数据处理和消息传递。本资料深入探讨了Kafka如何保证数据的可靠性,这对于理解Kafka的核心机制以及在实际...