赞
踩
Kafka
在流式计算中,Kafka一般用来缓存数据,spark streaming通过消费Kafka的数据进行计算。
Apache Kafka是一个开源消息系统,由Scala写成。
是由Apache软件基金会开发的一个开源消息系统项目。
Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。
该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,
但是在设计实现上完全不同,此外它并不是JMS规范的实现。 能够轻松实现高吞吐、可扩展、高可用,
并且部署简单快速、开发接口丰富,各大互联网公司已经在生产环境中广泛使用,
目前已经有很多分布式处理系统支持使用Kafka,比如,Spark、Strom、Flume等
1.传统的消息通信方式
a.Socket通信协议 端到端通信
缺点:1)服务器端和客户端必须同时在线(两端任何一端不在线都无法传输数据);
2)传输大量数据时,数据安全不完备(如果传一个文件会正常接收,
如果传2个G的文件那么会容易出现丢包的情况),对网络要求极高。
b.文件服务器(ftp) ftp的出现是解决soket的缺点, 不用同时在线,解决超大文件上传, 下载问题 ftp是解决Socket的缺点 f:指的是文件形式,一般指超大文件,电影等,如果传2G电脑用Socket,容易丢包,socket必须两端同时在线 ftp的优先是解决socket的缺点 缺点:1)实时性比较差(socket客户端和服务器端发送消息时时接收到数据,ftp不需要同时在线); 2)本地磁盘IO读写(传输文件写到磁盘); c.共享数据库方式(Database) (大家都访问同一个库) 优点: 据库连接池有限的; (一边往数据库里插数据,一边从数据库里获取数据,) 缺点:系统间访问共享数据库比较难实现: 因业务需求很难将数据库共享(系统间的共享数据库很难实现,例如淘宝数据库和美团的数据库); d.JMS(Java Message Services)协议 【JMS.doc】 JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范, 它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口 简化企业应用的开发,翻译为Java消息服务。 通过JMS协议,可以通过不同平台互相发送消息,所以要求每个平台都要对应相应的接口开发程序, 需要面向业务编程 缺点:具体相关业务的需求 点对点(一对一模式) 一旦一个消息被阅读,该消息将被从队列中移走。 (queue,只要有一个consumer消费,就会从队列中移除,采用拉的方式) JMS主题(一对多) 一种支持发送消息给多个订阅者的机制(采用推的方式)。 e.KAFKA消息队列 系统解耦、削峰填谷、定时任务、异步通知等等 消息队列是在JMS基础上开发出来的,它没有queue队列,和JMS一样有topic,consumer有组, 每一个topic可以被每一个consumer group的一个counsermer消费 即如果有两个组A B ,其中A组中有 a1consumer a2consumer a3consumer B组中有b1consumer b2consumer b3consumer, 那么A组中任意某一个consumer消费会从这个组队列中移除, B组同理如果想让a1 a2 a3 b1 b2 b3都消费主题,可以分别给它们单独设组, (即只要组成员有一个消费就从该组队列移除,类似于queue)
1.kafka是用于构建实时数据管道和流媒体应用。它是水平扩展的,容错的,快速的; 2.相关概念: Broker:启动kafka的一个实例就是一个broker,默认端口9092.一个kafka集群可以启动多个broker同时对外提供 服务,broker不保存任何producer和consumer相关的信息 Topic:主题,kafka中同一种类型数据集的名称,相当于数据库中的表,productor将同一类型的数据写入同 一个topic下,consumer从同一个topic消费同一类型的数据。逻辑上同一个数据集只有一个topic, 如果设置一个topic有多个partition和多个replication,在物理上同一个topic下的数据集会被分成多份 存储到不同的物理机上 Partition:partition是物理上的概念,每个topic包含一个或多个partition, 创建topic时可指定parition 数量。每个partition对应于一个文件夹, 该文件夹下存储该partition的数据和索引文件 理论上partition数越多,系统的整体吞吐率就越高,但是在实际应用中并不是partition越多越好, 反而过多的partition在broker宕机需要重新对partition选主, 在这个过程中耗时太久会导致partition 暂时无法提供服务,造成写入消息失败。 分区命名规则是topcname-inde(eg: testtopic-1 testtopic-2) 为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上, 一个topic可以分为多个partition,每个partition是一个有序的队列。 partition中的每条消息都会被分配一个有序的id(offset)。 kafka只保证按一个partition中的顺序将消息发给consumer, 不保证一个topic的整体(多个partition间)的顺序 Producer:消息生产者,负责向kafka中发布消息(推方式) Consumer Group:消息者所属组,一个Consumer Group可以包含一个或者多个consumer,当一个topic(分区)被一个 Consumer Grop消费的时候,Consumer Group内只能有一个consumer消费同一条消息,不会出现同一个 Consumer Group中多个consumer同时消费一条消息造成一个消息被一个Consumer Group消费多次的情况 Consumer:消息消费者,consumer从kafka指定的主题中拉取消息 (拉方式) Zookeeper中:Zookeeper在kafka集群中主要用于协调管理,Kafka将元数据信息保存在Zookeeper中,通过Zookeeper 的协调管理来实现整个Kafka集群的动态扩展、各个Broker负载均衡、Productor通过Zookeeper感知Partition 的Leader、Consumer消费的负载均衡并可以保存Consumer消费的状态信息 Kafka是什么? 在流式计算中,Kafka一般用来缓存数据,spark streaming通过消费Kafka的数据进行计算 在Kafka中,broker一般有多个,组成一个分布式高容错的集群 ·主要职责是接受Producer和Consumer的请求,并把消息持久化到本地磁盘 ·broker以topic为单位将消息分成不同的分区(partition),每个分区可以有多个副本,通过数据冗余的方式实现容错 ·Kafka能够保证同一topic下同一partition内部的消息是有序的,但无法保证partition之间的消息全局有序 ·Kafka broker以追加的方式将消息写到磁盘文件中,且每个分区中的消息被赋予了唯一整数标识,称之为"offset"(偏移量) ·broker中保存的数据是有有效期的,默认是7天,过了有效期存放易燃数据将被移除以释放磁盘空间。 只要数据在有效期内,Consumer可以重复读取而不受限制
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。