1. Kafka的作用
在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。有没有一个系统可以同时搞定在线应用(消息)和离线应用(数据文件,日志)?这就需要kafka。Kafka可以起到两个作用:
1、降低系统组网复杂度。
2、降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线的作用。
2. Kafka产生背景
Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中非常常见,这些数据包括网站的pv、用户访问了什么内容,搜索了什么内容等。 这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。
传统的日志分析系统提供了一种离线处理日志信息的可扩展方案,但若要进行实时处理,通常会有较大延迟。而现有的消(队列)系统能够很好的处理实时或者近似实时的应用,但未处理的数据通常不会写到磁盘上,这对于Hadoop之类(一小时或者一天只处理一部分数据)的离线应用而言,可能存在问题。Kafka正是为了解决以上问题而设计的,它能够很好地离线和在线应用。
3. Kafka架构
生产者(producer):消息和数据产生者
代理(Broker):缓存代理
消费者(consumer):消息和数据消费者
架构很简单,Producer,consumer实现Kafka注册的接口,数据从producer发送到broker,broker承担一个中间缓存和分发的作用。broker分发注册到系统中的consumer。
4. 设计要点
1、直接使用linux 文件系统的cache,来高效缓存数据。
2、采用linux Zero-Copy提高发送性能。传统的数据发送需要发送4次上下文切换,采用sendfile系统调用之后,数据直接在内核态交换,系统上下文切换减少为2次。根据测试结果,可以提高60%的数据发送性能。Zero-Copy详细的技术细节可以参考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/
3、数据在磁盘上存取代价为O(1)。
a. kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一个逻辑log,有多个segment组成。
b. 每个segment中存储多条消息(见下图),消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。
c. 每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。
d. 发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。
4、显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。
Producer和broker之间没有负载均衡机制。
broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到通知。
5. 类似的系统
RocketMQ:国内淘宝团队参考开源的实现的消息队列,号称解决了kafka的一些问题,如优先级问题。
6. 参考资料:
http://blog.chinaunix.net/uid-20196318-id-2420884.html
http://dongxicheng.org/search-engine/kafka/
相关推荐
这个场景中,我们关注的是“向Kafka插入数据”的测试。这涉及到多个知识点,包括Kafka的基本概念、生产者API、数据模型、以及如何进行测试。 1. **Kafka基本概念**:Kafka是一个高吞吐量、低延迟的消息队列系统,它...
### Flume采集数据到Kafka,然后从Kafka取数据存储到HDFS的方法思路和完整步骤 #### 一、概述 随着大数据技术的发展,高效的数据采集、处理与存储变得尤为重要。本文将详细介绍如何利用Flume采集日志数据,并将其...
对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
本文将深入探讨如何实现Storm与Kafka的集成,重点在于如何从Kafka中读取数据。 **一、整合说明** Apache Storm是一个开源的分布式实时计算系统,它能够持续处理无限的数据流,确保每个事件都得到精确一次(Exactly...
在车联网数据收集与分析平台中,Kafka作为中间件,负责接收MQTT推送的数据,并进行可靠存储和转发。它的高吞吐量和容错性确保了大规模数据流的稳定传输。此外,Kafka还支持数据的实时处理,允许在数据产生时进行...
在大数据处理领域,将Kafka数据接入到MySQL中是一个常见的需求。Kafka作为一个高吞吐量、分布式的实时消息发布订阅系统,常用于日志收集、流式数据处理等场景。而MySQL则作为广泛应用的关系型数据库,用于持久化和...
消费kafka某时间段消息用于分析问题,生产环境海量数据,用kafka-console-consumer.sh只能消费全量,文件巨大,无法grep。 代码来源于博主:BillowX_ ,感谢分享 原贴地址:...
7. **数据处理**:在批量消费数据后,通常需要对数据进行业务逻辑处理,这可能涉及到数据清洗、聚合、分析等操作。SpringBoot结合其他数据处理库(如Apache Spark、Hadoop等)可以实现复杂的数据处理任务。 通过...
OGG增量抽取Oracle业务数据到kafka部署手册 OGG(Oracle GoldenGate)是一种数据集成工具,用于实时集成和复制数据 zwischen Oracle 数据库和 Kafka 消息队列。下面是 OGG 增量抽取 Oracle 业务数据到 Kafka 的部署...
在分布式消息系统领域,Apache Kafka 是一个非常关键的组件,被广泛用于实时数据流处理和构建数据管道。本文将深入探讨“Kafka 读取写入数据”的核心知识点,包括 Kafka 的基本架构、数据模型、生产者与消费者原理...
基于springboot+kafka+echarts的IoT数据分析系统 基于springboot+kafka+echarts的IoT数据分析系统 基于springboot+kafka+echarts的IoT数据分析系统 基于springboot+kafka+echarts的IoT数据分析系统 基于springboot+...
Flink实时同步Kafka数据到Doris
- **容量规划**:查看主题的分区和副本分布,为集群扩展提供数据支持。 - **日常运维**:定期检查集群健康状况,及时发现并处理异常节点。 4. **优点与局限**: - **优点**:界面直观,操作简便,适合快速上手和...
二、写入数据到Kafka 三、从Kafka中读取数据 整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持; Storm Kafka ...
综上所述,kettle kafka 消息者插件是Pentaho ETL工具集中的一个重要组成部分,它有效地打通了Kafka和Pentaho之间的数据通道,为企业构建实时数据处理和分析的解决方案提供了便利。用户可以根据实际需求定制插件配置...
总的来说,"storm-kafka实时趋势分析"是一种强大的实时数据处理解决方案,它结合了Storm的实时计算能力和Kafka的消息中间件特性,可以广泛应用于各种实时数据分析场景,如电商的实时销量分析、社交媒体的情绪分析等...
Kafka是一款分布式流处理平台,由LinkedIn开发并...通过添加适当的序列化库和配置Kafka连接信息,用户可以在无需编写代码的情况下便捷地查看和分析Kafka中的数据流。这对于数据监控、调试和数据分析等场景非常有价值。
标题“基于Storm与Kafka集群的火电厂分布式流式数据建模与分析系统”指向了两个主要的技术组件:Apache Storm和Apache Kafka,以及它们在火电厂数据处理方面的应用。Apache Storm是一个分布式的、实时的计算系统,...
在这个数据统计与分析系统中,Flink 作为处理引擎,可以从 Kafka 消费数据,执行实时分析任务,如计算每分钟的访问量、最热门的页面、平均响应时间等。Flink 的事件时间处理和窗口功能使其在处理延迟数据和动态数据...
Flink消费Kafka数据 Flink 是一种大数据处理引擎,可以消费 Kafka 数据。本文将介绍如何使用 Flink 消费 Kafka 数据,并提供了实验环境的配置和资源购买的详细步骤。 一、实验环境配置 在本实验中,我们将使用...