【转】kafka概念入门[一]

转载的,原文:http://www.cnblogs.com/intsmaze/p/6386616.html

-----------------------------------------------------------------------------------------------------

Kafka概念入门(一)

序:如何保证kafka全局消息有序?

  比如,有100条有序数据,生产者发送到kafka集群,kafka的分片有4个,可能的情况就是一个分片保存0-25,一个保存25-50......这样消息在kafka中存储是局部有序了。严格说,kafka是无法保证全局消息有序的,没有这个机制,只能局部有序。

1、Kafka是什么

  在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

  Apache Kafka是一个开源消息系统,由Scala写成。

  Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。

  Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群由多个kafka实例组成,每个实例(server)称为broker。

  题外话:无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

原文和作者一起讨论:http://www.cnblogs.com/intsmaze/p/6386616.html

微信:intsmaze

2、Kafka核心组件
  Topic:消息根据Topic进行归类,可以理解为一个队里。
  Producer:消息生产者,就是向kafka broker发消息的客户端。
  Consumer:消息消费者,向kafka broker取消息的客户端。
  broker:每个kafka实例(server),一台kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic。
  Zookeeper:依赖集群保存meta信息。
 
3、Kafka消息有序性

  生产者是一个独立的集群,和kafka的broker集群,消费者集群没有太直接的干系。比如flume就可以作为生产者,内部调用kafka的客户端代码,确保把收集的数据发到kafka集群中。

  如何保证kafka全局消息有序?

  比如,有100条有序数据,生产者发送到kafka集群,kafka的分片有4个,可能的情况就是一个分片保存0-25,一个保存25-50......这样消息在kafka中存储是局部有序了。严格说,kafka是无法保证全局消息有序的,没有这个机制,只能局部有序。

  但是如果只有一个分片和一个消息的生产者,那么就相当于消息全局有序了。如果有多个消息生产者,就算只有一个分片,如果这些生产者的消息都发给这个分片,那kafka中的消息连局部有序都没有办法了。

4、消费者组

  Consumer Group(CG):这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。

  Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

  Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

  每个group中可以有多个consumer,每个consumer属于一个consumer group;通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。

  对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。

  在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。

  kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

Producer客户端负责消息的分发

  kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"/"partitions leader列表"等信息;

  当producer获取到metadata信息之后, producer将会和Topic下所有partition leader保持socket连接

  消息由producer直接通过socket发送到broker,中间不会经过任何"路由层",事实上,消息被路由到哪个partition上由producer客户端决定;比如可以采用"random""key-hash""轮询"等,如果一个topic中有多个partitions,那么在producer端实现"消息均衡分发"是必要的。

  在producer端的配置文件中,开发者可以指定partition路由的方式。

  Producer消息发送的应答机制设置发送数据是否需要服务端的反馈,有三个值0,1,-1

    0:producer不会等待broker发送ack

    1:当leader接收到消息之后发送ack

    -1:当所有的follower都同步消息成功后发送ack

  request.required.acks=0

时间: 2024-10-12 03:43:58

【转】kafka概念入门[一]的相关文章

Kafka Streams入门指南

应该会有不少人觉得我标题打错了,是不是想讲SparkStreaming或者Kafka+SparkStreaming啊?实际上这不是笔误,Kafka Streams是Kafka 0.10提供的新能力,用于实时处理Kafka中的数据流,和现有的流处理技术如SparkStreaming,Storm,Flink还是有些区别的. 1 概况 Kafka Streams是一套处理分析Kafka中存储数据的客户端类库,处理完的数据或者写回Kafka,或者发送给外部系统.它构建在一些重要的流处理概念之上:区分事件

Kafka 之 入门

一.入门 1.    简介 Kafka is a distributed, partitioned, replicated commit log service.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker.无论是kafka集群,还是producer和consume

Serverless 基本概念入门

从行业趋势看,Serverless 是云计算必经的一场革命 2019 年,Serverless 被 Gartner 称为最有潜力的云计算技术发展方向,并被赋予是必然性的发展趋势.Serverless 从底层开始变革计算资源的形态,为软件架构设计与应用服务部署带来了新的设计思路. 为此,我们策划了?Serverless 技术专栏,从基础概念入门,到前后台架构设计.应用拓展.最佳实践等多维度,揭开 Serverless 的面纱,带你走进无服务器的世界. 什么是 Serverless? Serverl

kafka急速入门与核心API解析

kafka急速入门与核心API kafka急速入门与核心API解析 kafka环境安装 上一节课我们已经对kafka的基本概念.核心思想有了一定的了解和认知,并且掌握了kafka在实际工作中的一些主要的应用场景.那么接下来,我们就一起快速进入kafka的安装吧. kafka下载地址:http://kafka.apache.org/downloads.html kafka安装步骤:首先kafka安装需要依赖与zookeeper,所以小伙伴们先准备好zookeeper环境(三个节点即可),然后我们来

互联网服务器集群基本概念入门

2019-08-18 关键字:Linux集群.集群服务器.负载均衡集群.高可用集群 互联网的核心组件是各种服务站点.例如购物领域我们有淘宝.京东.拼多多等,出行领域我们有滴滴.首约.货拉拉等,通讯领域则有微信.QQ等.这些服务站点的背后是靠一台台性能出众的电脑来提供各种服务的.但随着互联网所覆盖的人群越来越广.在人们生活中的渗透越来越深,我们每时每刻所发起的服务请求都都是海量的,而单台计算机的计算能力又是极其有限的.为了满足日益增长的计算需求,就产生了一种被称为 “服务器集群” 的计算服务模式.

[转帖]新手必读,16个概念入门 Kubernetes

新手必读,16个概念入门 Kubernetes https://www.kubernetes.org.cn/5906.html 2019-09-29 22:13 中文社区 分类:Kubernetes教程/入门教程 阅读(333) 作者:汉科云团队 评论(0) Kubernetes是Google开源的容?集群管理系统,是Google多年?规模容?管理技术Borg的开源版本,主要功能包括: 基于容器的应用部署.维护和滚动升级 负载均衡和服务发现 跨机器和跨地区的集群调度 自动伸缩 无状态服务和有状态

kafka经典入门

问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件?6.producer是否直接将数据发送到broker的leader(主节点)?7.Kafa consumer是否可以消费指定分区消息?8.Kafka消息是采用Pull模式,还是Push模式?9.Procuder API有哪两种?10.Kafka存储在硬盘上的消息格式是什么? 一.基本概念

kafka概念原理

为什么需要消息系统:由于消息发送者不需要等待消息接收者处理数据就可以返回,系统具有更好的响应延时,同时,在网站访问高峰,消息可以暂时存储在消息队列中等待消息接收者根据自己负载处理能力控制消息处理速度,减轻数据库等后端存储的负载压力 1.解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的

kafka 快速入门

1.3快速入门 Step 1: 下载Kafka 点击这里下载 Download 并解压 > tar -xzf kafka_2.10-0.8.2.0.tgz> cd kafka_2.10-0.8.2.0 Step 2: 启动服务 Kafka 使用 ZooKeeper 因此需要首先启动 ZooKeeper 服务.如果你没有ZooKeeper 服务,可以使用Kafka自带脚本启动一个应急的单点的 ZooKeeper 实例. > bin/zookeeper-server-start.sh con