`

Kafka

    博客分类:
  • MQ
阅读更多

慢慢道来……

原来,对于Linkin这样的互联网企业来说,用户和网站上产生的数据有三种

  1. 需要实时响应的交易数据,用户提交一个表单,输入一段内容,这种数据最后是存放在关系数据库(Oracle, MySQL)中的,有些需要事务支持。
  2. 活动流数据,准实时的,例如页面访问量、用户行为、搜索情况,这些数据可以产生啥?广播、排序、个性化推荐、运营监控等。这种数据一般是前端服务器先写文件,然后通过批量的方式把文件倒到Hadoop这种大数据分析器里面慢慢整。
  3. 各个层面程序产生的日志,例如httpd的日志、tomcat的日志、其他各种程序产生的日志。码农专用,这种数据一个是用来监控报警,还有就是用来做分析。

Linkin的牛逼之处,就在于他们发现了原先2,3的数据处理方式有问题,对于2而言,原来动辄一两个钟头批处理一次的方式已经不行了,用户在一次购买完之后最好马上就能看到相关的推荐。而对于3而言,传统的syslog模式等也不好用,而且很多情况下2和3用的是同一批数据,只是数据消费者不一样。

这2种数据的特点是:

  1. 准实时,不需要秒级响应,分钟级别即可。
  2. 数据量巨大,是交易数据的10倍以上。
  3. 数据消费者众多,例如评级、投票、排序、个性化推荐、安全、运营监控、程序监控、后期报表等

于是,Linkin就自己开发了一套系统,专门用来处理这种性质的数据,这就是Kafka

那么,在整个实践过程中Linkin做了什么样的设计,解决了什么问题?

首先看下数据流动图:

数据结构图

多数据中心怎么管理数据:

跨数据中心图

集群本身的架构图

Kafka内部架构图

Kafka内部架构图,分为数据产生者(Producer),数据中间者(Broker),数据消费者(Consumer)

显然,这是一个集群的发布/订阅系统,有如下几个特点

  1. 生产者是推数据(Push),消费者是拉数据(Pull)。存在数据复用,在Linkin平均生产1条消息会被消费5.5次。
  2. 数据生产者和数据消费者的速度不对等,所以要把数据沉淀在Kafka内慢慢处理,Linkin一般在集群内放7天的数据。
  3. 性能上追求高吞吐,保证一定的延时性之内。这方面做了大量优化,包括没有全局hash,批量发送,跨数据中心压缩等等。
  4. 容错性上使用的“至少传输一次”的语义。不保证强一次,但避免最多传一次的情况。
  5. 集群中数据分区,保证单个数据消费者可以读到某话题(topic)的某子话题(例如某用户的数据)的所有数据,避免全局读数据
  6. 数据规范性,所有数据分为数百个话题,然后在数据的源头——生产者(Producer)这边就用Schema来规范数据,这种理念使得后期的数据传输、序列化、压缩、消费都有了统一的规范,同时也解决了这个领域非常麻烦的数据版本不兼容问题——生产者一改代码,消费者就抓瞎。
  7. 用于监控,这个系统的威力在于,前面所有生产系统的数据流向,通过这个系统都能关联起来,用于日常的运营也好,用于数据审计,用于运维级别的监控也好都是神器啊!

所以,Kafka的设计基本上目前这个领域的唯一选择。我也看了很多其他实现,包括:

scribe(Facebook)          | 2   | C++      | 已停止更新,不建议使用
flume(Apache, Cloudera)   |1    | Java     | 配置较重
chukwa(Hadoop)            |12   | Java     | 2012发布最后一版,不建议使用
fluentd                   |1    | Ruby     | 比较活跃,看起来不错
logstash                  |12345| JRuby    | 功能全,据说有不少小bug
splunk                    |12345| C/Python | 商业闭源,功能强大,可做参考
timetunnel(Alibaba)       | 2   | Java     | 基于thrift,10年左右成熟
kafka(Linkin)             | 2 4 | Scala    | 性能强劲,设计巧妙,可以作为基础设施
Samza(Linkin)             |12345|          | =Kafka+YARN+Hadoop
rabbitmq/activemq/qpid    | 2   | Java     | 传统消息中间件
Storm(twitter)            |  3  | Clojure  | 实时计算系统
Jstorm(Alibaba)           |  3  | Java     | storm的Java版,据说更稳定
S4(Yahoo)                 |  3  | Java     | 2013年已停止维护
Streambase(IBM)           |  3  | Java     | 商业产品,作为参考
HStreaming                |  3  | Java     | 商业产品,作为参考
spark                     |  3  | Scala    | 基于Hadoop
mongodb                   |   4 | C++      | 比较浪费硬盘
mysql                     |   4 | C++      | 无需多说
hdfs/hbase                |   4 | Java     | 无需多说
  1. 数据采集组件
  2. 数据传输组件
  3. 数据实时计算/索引/搜索组件
  4. 数据存储/持久化组件
  5. 数据展示/查询/报警界面组件

从数据传输这块的设计理念来说,Kafka是最为先进的,

分享到:
评论

相关推荐

    Kafka管理工具Kafka Tool

    **Kafka Tool:高效管理Apache Kafka集群的利器** Apache Kafka是一个分布式的流处理平台,广泛应用于大数据实时处理、日志聚合、消息系统等多个领域。在Kafka的实际操作中,管理和监控集群是至关重要的任务,而...

    kafkatool 连接kafka工具

    **Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...

    kafka2种工具 kafkatool-64bit.exe kafka-eagle-bin-1.4.6.tar.gz

    在IT行业中,Kafka是一种广泛使用的分布式流处理平台,它由Apache软件基金会开发,主要用于构建实时数据管道和流应用。本文将围绕标题和描述中提到的两种Kafka工具——kafkatool-64bit.exe和kafka-eagle-bin-1.4.6....

    5、kafka监控工具Kafka-Eagle介绍及使用

    Apache Kafka 是一个分布式流处理平台,常用于构建实时的数据管道和应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效...

    kafka可视化工具--kafkatool

    **Kafka工具详解——Kafkatool** Kafka作为一个分布式流处理平台,广泛应用于大数据实时处理和消息传递。然而,管理Kafka集群和操作其组件(如topics、partitions、offsets等)可能会变得复杂,这时就需要一些可视...

    springboot 基于spring-kafka动态创建kafka消费者

    在Spring Boot应用中,我们可以利用Spring Kafka框架来与Apache Kafka进行集成,实现高效的消息传递。本文将详细探讨如何在Spring Boot项目中基于Spring Kafka动态创建Kafka消费者。 首先,了解Kafka基本概念:...

    kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)

    1、使用bootstrap、userName、password连接kafka。 2、可使用text、json格式发送topic消息。 3、异步producer、customer,收发消息畅通无阻。 Kafka生产者的主要作用是将应用程序产生的数据发送到Kafka集群的主题中...

    StormStorm集成Kafka 从Kafka中读取数据

    本文将深入探讨如何实现Storm与Kafka的集成,重点在于如何从Kafka中读取数据。 **一、整合说明** Apache Storm是一个开源的分布式实时计算系统,它能够持续处理无限的数据流,确保每个事件都得到精确一次(Exactly...

    kafka报文模拟工具

    《Kafka报文模拟工具深度解析》 在现代大数据处理领域,Apache Kafka作为一个高效、可扩展的实时流处理平台,已经成为了许多企业级应用的核心组件。然而,在开发和测试过程中,有时我们需要模拟Kafka报文的发送,...

    Kafka详细课程讲义

    **Kafka详细课程讲义** 本课程主要涵盖了Apache Kafka的核心概念、安装配置、架构解析、API使用以及监控与面试知识点,旨在帮助学习者全面理解并掌握这一强大的分布式流处理平台。 **第 1 章 Kafka 概述** Apache...

    Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码

    《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...

    kafka安装包-2.13-3.6.2

    **Kafka介绍** Apache Kafka是一款高性能、分布式的消息中间件,由LinkedIn开发并捐献给Apache软件基金会。它最初设计的目标是构建一个实时的数据管道,能够高效地处理大量的数据流,同时支持发布订阅和队列模型,...

    kafka资源下载kafka_2.11-2.0.0.tgz

    ### 关于Kafka资源下载kafka_2.11-2.0.0.tgz的知识点 #### Kafka简介 Apache Kafka是一种开源的消息队列服务,它最初由LinkedIn开发,并于2011年成为Apache软件基金会的一个顶级项目。Kafka因其高性能、可扩展性和...

    Kafka Tool 2.0.7(linux系统)

    **Kafka Tool 2.0.7 在 Linux 系统中的使用详解** Kafka Tool 是一款功能强大的 Apache Kafka 管理工具,适用于监控、管理、以及数据迁移等任务。在 Linux 系统中,我们可以方便地利用此工具进行各种 Kafka 相关的...

    使用netty实现TCP长链接消息写入kafka以及kafka批量消费数据

    在IT行业中,网络通信和大数据处理是两个至关重要的领域,Netty和Kafka分别是这两个领域的佼佼者。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高并发、低延迟的网络应用,如TCP服务器。而Kafka...

    kafka-2.12-2.8.2

    《Apache Kafka 2.8.2:分布式流处理平台详解》 Apache Kafka是一个开源的分布式流处理平台,由LinkedIn开发并捐赠给Apache软件基金会。Kafka 2.8.2是该平台的一个重要版本,提供了丰富的功能和改进,旨在满足大...

    kafka-java-demo 基于java的kafka生产消费者示例

    【Kafka基础知识】 Kafka是由Apache开发的分布式流处理平台,它主要被设计用来处理实时数据流。在大数据处理领域,Kafka常被用于构建实时数据管道和流应用,能够高效地处理大量的实时数据。 【Java与Kafka的结合】...

    最新版kafka kafka_2.12-2.5.1.tgz

    **Kafka 2.5.1 知识点详解** Kafka 是一个分布式流处理平台,由 Apache 软件基金会开发,广泛应用于大数据实时处理、日志收集、消息系统等多个领域。`kafka_2.12-2.5.1` 是 Kafka 的一个特定版本,针对 Scala 2.12 ...

    kafka-2.12-2.7.0.tar

    kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-2.7.0.tar kafka_2.12-...

    Kafka尚硅谷.rar

    **Kafka概述** Kafka是由LinkedIn开发并贡献给Apache软件基金会的一个开源消息系统,它是一个高性能、可扩展的分布式消息中间件。Kafka最初设计的目标是处理网站活动流数据,但随着时间的发展,它已被广泛应用于...

Global site tag (gtag.js) - Google Analytics