大部分内容是翻译至Kafka The Definitive Guide,有翻译不好的地方请见谅,因为理解问题翻译错误的地方希望指出,我会及时改进
每个企业都由数据驱动。我们收集信息,分析信息,操纵信息并创造更多信息作为输出。 每个应用程序都会创建数据,无论它是日志消息,度量标准,用户活动,传出消息还是其他内容。 数据的每个字节都有一个要讲的故事,重要的事情将告知下一步要做的事情。 为了知道这是什么,我们需要从创建它的地方到可以分析的地方获取数据。
Apache Kafka是一个旨在解决这个问题的发布/订阅消息传递系统。它经常被描述为“分布式提交记录”,或者最近称为“分布式流式传输平台”。文件系统或数据库提交日志旨在提供持久记录 的所有交易,以便它们可以重播以持续建立系统状态。 同样,卡夫卡内的数据按顺序保存,并可以确定性地读取。 另外,数据可以在系统内分布以提供额外的保护以防止故障,这对于云平台有着跟重要的意义。
kafka是一个分布式流平台,流平台又三个主要的功能
- 发布和订阅记录流,类似于消息队列或企业消息传递系统
- 以容错持久的方式存储记录流。
- 处理记录发生的流
几个概念:
- kafka作为一个集群运行在一台或多台可以跨越多个数据中心的服务器上。
- kafka存储记录流存在topic中。
- 每个记录由一个键,一个值和一个时间戳组成。
Kafka 四个主要的Api:
- The Producer API allows an application to publish a stream of records to one or more Kafka topics.
- The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.
- The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams.
- The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table.
kafkat特点:
Persistent messaging:
为了从大数据中推导出真正的价值,无法提供任何类型的信息损失。 Apache Kafka采用O(1)磁盘结构设计,即使存储的消息大量存储在TB中,也可以提供恒定的性能。 通过Kafka,邮件可以保存在磁盘上,也可以在群集中复制以防止数据丢失。High throughput
保存大数据,Kafka被设计运行在可伸缩的硬件上,并能够处理来自大量客户端的每秒数百MB的读写。Distributed
Apache Kafka的集群中心设计明确支持Kafka服务器上的消息分区,并在消费者机器集群上分配消耗,同时保持每分区排序语义。Kafka集群可以弹性且透明地工作而不会出现任何停机Real time
生产者线程产生的消息应该立即对消费者线程可见;此功能对基于事件的系统(如复杂事件处理(CEP)系统)至关重要。