`

分布式消息系统Kafka初步

 
阅读更多

终于可以写kafka的文章了,Mina的相关文章我已经做了索引,在我的博客中置顶了,大家可以方便的找到。从这一篇开始分布式消息系统的入门。

在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题:

 

l  我想分析一下用户行为(pageviews),以便我能设计出更好的广告位

l  我想对用户的搜索关键词进行统计,分析出当前的流行趋势。这个很有意思,在经济学上有个长裙理论,就是说,如果长裙的销量高了,说明经济不景气了,因为姑娘们没钱买各种丝袜了。

l  有些数据,我觉得存数据库浪费,直接存硬盘又怕到时候操作效率低。

这个时候,我们就可以用到分布式消息系统了。虽然上面的描述更偏向于一个日志系统,但确实kafka在实际应用中被大量的用于日志系统。

首先我们要明白什么是消息系统,在kafka官网上对kafka的定义叫:A distributed publish-subscribe messaging system。publish-subscribe是发布和订阅的意思,所以更准确的说kafka是一个消息订阅和发布的系统。publish- subscribe这个概念很重要,因为kafka的设计理念就可以从这里说起。

我们将消息的发布(publish)暂时称作producer,将消息的订阅(subscribe)表述为consumer,将中间的存储阵列称作broker,这样我们就可以大致描绘出这样一个场面:

分布式消息系统Kafka初步

 

生产者(蓝色,蓝领么,总是辛苦点儿)将数据生产出来,丢给broker进行存储,消费者需要消费数据了,就从broker中去拿出数据来,然后完成一系列对数据的处理。

乍一看这也太简单了,不是说了它是分布式么,难道把producerbrokerconsumer放在三台不同的机器上就算是分布式了么。我们看kafka官方给出的图:

分布式消息系统Kafka初步

 

多个broker协同合作,producerconsumer部署在各个业务逻辑中被频繁的调用,三者通过zookeeper管理协调请求和转发。这样一个高性能的分布式消息发布与订阅系统就完成了。图上有个细节需要注意,producerbroker的过程是push,也就是有数据就推送到broker,而consumerbroker的过程是pull,是通过consumer主动去拉数据的,而不是broker把数据主动发送到consumer端的。

这样一个系统到底在哪里体现出了它的高性能,我们看官网上的描述:

 

  • Persistent messaging with O(1) disk structures that provide constant time performance even with many TB of stored messages.
  • High-throughput: even with very modest hardware Kafka can support hundreds of thousands of messages per second.
  • Explicit support for partitioning messages over Kafka servers and distributing consumption over a cluster of consumer machines while maintaining per-partition ordering semantics.
  • Support for parallel data load into Hadoop.

至于为什么会有O(1)这样的效率,为什么能有很高的吞吐量我们在后面的文章中都会讲述,今天我们主要关注的还是kafka的设计理念。了解完了性能,我们来看下kafka到底能用来做什么,除了我开始的时候提到的之外,我们看看kafka已经实际在跑的,用在哪些方面:

  • LinkedIn - Apache Kafka is used at LinkedIn for activity stream data and operational metrics. This powers various products like LinkedIn Newsfeed, LinkedIn Today in addition to our offline analytics systems like Hadoop.
  • Mate1.com Inc. - Apache kafka is used at Mate1 as our main event bus that powers our news and activity feeds, automated review systems, and will soon power real time notifications and log distribution.
  • Tagged - Apache Kafka drives our new pub sub system which delivers real-time events for users in our latest game - Deckadence. It will soon be used in a host of new use cases including group chat and back end stats and log collection.
  • Boundary - Apache Kafka aggregates high-flow message streams into a unified distributed pubsub service, brokering the data for other internal systems as part of Boundary's real-time network analytics infrastructure.
  • Wooga - We use Kafka to aggregate and process tracking data from all our facebook games (which are hosted at various providers) in a central location.
  • AddThis - Apache Kafka is used at AddThis to collect events generated by our data network and broker that data to our analytics clusters and real-time web analytics platform.
  • Urban Airship - At Urban Airship we use Kafka to buffer incoming data points from mobile devices for processing by our analytics infrastructure.
  • Metamarkets - We use Kafka to collect realtime event data from clients, as well as our own internal service metrics, that feed our interactive analytics dashboards.
  • SocialTwist - We use Kafka internally as part of our reliable email queueing system.
  • Countandra - We use a hierarchical distributed counting engine, uses Kafka as a primary speedy interface as well as routing events for cascading counting
  • FlyHajj.com - We use Kafka to collect all metrics and events generated by the users of the website.

至此你应该对kafka是一个什么样的系统有所体会,并能了解他的基本结构,还有就是他能用来做什么。那么接下来,我们再回到producer、consumer、broker以及zookeeper这四者的关系中来。

 

分布式消息系统Kafka初步

 

我们看上面的图,我们把broker的数量减少,只有一台。现在假设我们按照上图进行部署:

l  Server-1 broker其实就是kafkaserver,因为producerconsumer都要去连它。Broker主要还是做存储用。

l  Server-2zookeeperserver端,zookeeper的具体作用你可以去官网查,在这里你可以先想象,它维持了一张表,记录了各个节点的IP、端口等信息(以后还会讲到,它里面还存了kafka的相关信息)。

l  Server-345他们的共同之处就是都配置了zkClient,更明确的说,就是运行前必须配置zookeeper的地址,道理也很简单,这之间的连接都是需要zookeeper来进行分发的。

l  Server-1Server-2的关系,他们可以放在一台机器上,也可以分开放,zookeeper也可以配集群。目的是防止某一台挂了。

简单说下整个系统运行的顺序:

1.         启动zookeeperserver

2.         启动kafkaserver

3.         Producer如果生产了数据,会先通过zookeeper找到broker,然后将数据存放进broker

4.         Consumer如果要消费数据,会先通过zookeeper找对应的broker,然后消费。

对kafka的初步认识就写到这里,接下去我会写如何搭建kafka的环境。 

来自:http://my.oschina.net/ielts0909/blog/92972

分享到:
评论
2 楼 kafodaote 2018-01-21  
Kafka分布式消息系统实战(与JavaScalaHadoopStorm集成)
网盘地址:https://pan.baidu.com/s/1jJfWvYY 密码: 7m8r
网盘地址:https://pan.baidu.com/s/1eTV5ygU 密码: 3g3v
1 楼 成大大的 2017-10-18  
Kafka分布式消息系统实战(与JavaScalaHadoopStorm集成)
——https://pan.baidu.com/s/1cAm9AI 密码: 7fvt

内容简介
Kafka是分布式的消息队列,作为云计算服务的基石,它广泛的应用在实时数据流方面,是实时数据处理的数据中枢,广泛应用在很多互联网企业,例如:linkedin,facebook,腾讯,百度,阿里等。实时数据流是现在互联网公司、甚至拥有大规模数据的传统企业的主要模式, 实时数据(Real-time Activity Data)就是那些非交易,不需要秒级响应的数据, 但在后续的分析中产生极大作用,例如个性化推荐、运营服务监控、精细化营销、报表等 。

本课程的目的在于系统性地介绍Kafka分布式消息系统,掌握了Kafka,你就拿到了大数据处理领域消息处理机制的钥匙,能够轻松上手开发分布式消息系统应用程序开发和维护,笑傲大数据处理技术。学完本课程,你可以掌握:

1.Kafka的部署方式
2.Kafka的原理
3.Kafka与其他大数据组件的集成
4.基于Kafka的程序开发



第一章 Kafka的基本介绍
   1.1 什么是消息系统
   1.2 消息队列的分类
   1.3 Kafka的基本架构和概念
   1.4 ZooKeeper简介和安装

第二章 Kafka的原理解析
   2.1 Kafka的Producer处理逻辑
   2.2 Kafka的broker处理逻辑
   2.3 Kafka的Consumer处理逻辑
   2.4 Kafka集群部署在zk里的存储结构

第三章 Kafka的部署方式
   3.1 Kafka伪集群部署模式
   3.2 Kafka集群部署模式
   3.3 核心配置文件server.properties

第四章 Kafka的Java应用开发
   4.1 Producer端的实现
   4.2 Consumer端的实现

第五章 Kafka的Scala应用开发
   5.1 Scala的Producer的实现
   5.2 Scala的Producer的实现

第六章 Kafka与Hadoop的集成
   6.1 Hadoop简介和配置
   6.2 集成Kafka和Hadoop

第七章 Kafka与Flume的集成
   7.1 Flume简介和使用
   7.2 集成Kafka和Flume

第八章 Kafka与Storm的集成
   8.1 Storm的运行机制和部署
   8.2 Storm编程案例
   8.3 集成Kafka和Storm

相关推荐

    Kafka的初步认识

    本文来自于csdn,Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统....用于在两个应用程序之间或分布式系统中发送消

    Kafka 实战演练 1

    在本文中,我们将深入探讨Apache Kafka,这是一个分布式流处理平台,广泛应用于大数据处理、实时数据管道和消息系统。Kafka实战演练1将带领我们初步了解Kafka的核心概念和基本操作,让我们一起探索这个强大的工具。 ...

    21丨分布式架构:如何应对高并发的用户请求.pdf

    包括分布式缓存(如Redis或Memcached)用于减轻数据库压力,负载均衡器(如Nginx或HAProxy)用于分配流量,反向代理和CDN(内容分发网络)加速内容传输,分布式消息队列(如RabbitMQ或Kafka)解耦系统组件,...

    Java思维导图xmind文件+导出图片

    Zookeeper 分布式系统的基石 从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式...

    wot-web攻击日志分析.pdf

    Kafka作为一个典型的分布式消息系统,能够支持水平扩展,提高集群的吞吐量。Kafka中的生产者(Producer)负责将数据发布到主题(Topic),消费者(Consumer)则订阅这些主题并从Kafka获取数据。Zookeeper集群用于...

    haskell的kafka客户端的(非常谦虚的)开端_Haskell_.zip

    在本文中,我们将深入探讨Haskell编程语言与Apache Kafka集成的初步知识,特别是关于Haskell的Kafka客户端的实现。标题“haskell的kafka客户端的(非常谦虚的)开端”暗示了这是一个关于初学者如何在Haskell环境中...

    Kafka-Pipeline:该项目旨在探索Kafka。 我创建了一个Twitter生产者,一个ElasticSearch消费者,并在一定程度上探讨了Kafka Streams

    该项目完全使用Java语言实现,强调了Java在大数据处理和分布式系统中的应用。Java具有广泛的支持库,如Twitter4J和Kafka的Java客户端,使得开发和集成变得简单。同时,Java的跨平台特性使得该解决方案可以在多种环境...

    基于Spark streaming+Kafka+RedisHBase的GBDT+LR推荐排序模型.zip

    通过以上讲解,我们可以看到,这个推荐系统结合了实时流处理、消息队列、内存数据库、分布式存储以及机器学习算法,构建了一套高效、实时且具备高预测能力的推荐模型。这种架构设计充分考虑了大数据处理的实时性、...

    基于Kafka和Hadoop架构的工程研发数据挖掘.pdf

    而Kafka,作为一种高吞吐量的分布式消息系统,非常适合用来处理实时数据流。在工程研发数据挖掘的背景下,Kafka可以帮助企业实时收集数据,而Hadoop则可以在数据积累到一定量后进行大规模的存储和分析处理。 在具体...

    BarSocial-SD:UFLA分布式系统最终工作的原型

    2. **消息队列**:为了处理异步任务和确保系统的高并发性,项目可能使用了RabbitMQ或Kafka这样的消息队列服务,将耗时的操作从主线程分离出来,提高响应速度。 3. **负载均衡**:为了分发用户请求并避免单点故障,...

    RocketMQ初见

    消息中间件是分布式系统中不可或缺的一部分,它的核心功能是实现不同系统之间的高效可靠的消息传递。通过这种方式,消息中间件能够帮助解决系统间的耦合问题、支持异步消息传递以及削峰等需求。这些特性使得消息...

    RabbitMQ 23 道面试题及答案.docx

    RabbitMQ 面试题及答案 ...Kafka 提供的消息中间件的功能明显较少一些,相对上述几款 MQ 中间件要少很多,但是 Kafka 的优势在于专为超高吞吐量的实时日志采集、实时数据同步、实时数据计算等场景来设计。

    实时用户行为服务系统架构-日处理20亿数据.pptx

    - **分布式消息队列(Kafka)**:作为数据传输的中间层,实现数据的可靠传递。 - **流式计算框架(Storm)**:处理实时数据流,提供低延迟的计算能力。 - **分布式缓存(Redis)**:用于存储高频访问的数据,提高系统...

    java处理海量数据的初步解决思路

    最后,Apache Kafka是一个高吞吐量的分布式消息队列,常用于构建实时数据管道。Java开发者可以使用Kafka的Java客户端库来生产和消费消息,实现数据的异步处理。 总的来说,Java处理海量数据涉及内存管理、分片处理...

    行业文档-设计装置-消息队列大数据去重处理方法.zip

    常见的消息队列产品有RabbitMQ、Kafka、ActiveMQ等。 在大数据去重处理中,消息队列可以扮演关键角色。当大量数据涌入时,系统可以通过消息队列将数据分发到多个消费者进行处理,每个消费者负责检查其分配的数据...

    MySQL业务双活的初步设计方案.docx

    综上所述,MySQL业务双活设计方案涉及到分布式系统、数据复制、高可用性、一致性模型、数据处理和消息队列等多个核心概念,通过合理的架构设计和组件选择,可以构建出可靠的跨数据中心数据库服务。

    大数据-数据采集平台(一)

    Kafka是由LinkedIn开发并贡献给Apache的分布式流处理平台,它兼具消息队列和数据流处理的功能。在数据采集平台中,Kafka主要作为实时数据管道,能够高效地处理和存储大量的实时数据流。Kafka的高吞吐量和低延迟特性...

    微服务系统和数据库设计方案.docx

    微服务架构是分布式系统的一种实现方式,它强调服务的独立性和轻量级通信。每个微服务运行在自己的进程中,通常通过HTTP RESTful API进行通信。这种设计允许使用不同的编程语言和技术栈,增强了系统的灵活性。在...

Global site tag (gtag.js) - Google Analytics