Kafka是一个由
apache软件基金会开发、
Scala和Java编写的开源流处理平台。该项目旨在提供一个高吞吐、低延迟的平台,用于处理实时数据。Kafka是一种分布式发布订阅消息系统,可以处理现代网络上的大量社会功能,如网页浏览、搜索等,这些数据对于现代网络至关重要。Kafka旨在通过
Hadoop的并行加载机制,统一线上和离线的消息处理,并为集群提供实时消息。
Kafka通过连接到外部系统(用于数据导入/导出),并通过Kafka Connect提供。此外,Kafka还提供了一个名为Kafka Streams的Java流式处理库。Kafka的设计受到事务日志的影响,其
持久化层本质上是一个“大规模发布/订阅消息队列”,这使得Kafka成为企业级基础设施,用于处理流式数据非常有价值。
kafka的架构师jay kreps对于kafka的名称由来是这样讲的,由于jay kreps非常喜欢franz kafka,并且觉得kafka这个名字很酷,因此取了个和消息传递系统完全不相干的名称kafka,该名字并没有特别的含义。
kafka的诞生,是为了解决
Linkedin的数据管道问题,起初linkedin采用了
ActiveMQ来进行
数据交换,大约是在2010年前后,那时的ActiveMQ还远远无法满足linkedin对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,linkedin决定研发自己的消息传递系统,当时linkedin的首席架构师jay kreps便开始组织团队进行消息传递系统的研发。
• 通过O(1)的
磁盘数据结构提供消息的
持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
• 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
• 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group
人名,若不指定group name则属于默认的group)。