kafka组件简介

六个核心角色

product 生产者(数据提供者)
topic 消息类别(每条由product发布到kafka的消息都有一个topic,不同的topic消息分开储存)
partition 分区 物理概念(每个topic都至少有一个或很多个partition)
broker 服务器(kafka集群的一个节点)
consumer group 消费者组别
consumer 消费者

角色理解

topic&partition
可以吧topic理解陈一个先进先出的传送带(queue队列),你需要在发布消息到卡夫卡的时候确定你需要吧你的消息发布的哪个队列中
partition是为了提高卡夫卡的吞吐率,每个topic都会有若干个portion,每个partition 代表着一个物理环境下的文件夹,文件夹里面储存着改partition的所有消息和对应的索引

product
消息生产者吧消息push到卡夫卡的时候,会根据制定好的partition规则吧消息存储到对应的partition 中,这样就实现了负载均衡,同时也提高了IO性能

consumer group
消费者小组要和消息的消费方式结合理解:
同一个topic的同一条消息只能被同一个consumer group 的一个consumer消费
多个consumer group 能够同是消费同一条消息
这样就可以实现一个广播模式或者独播模式
独播: 把所有的consumer放入到同一个consumer group里面,那me该条消息只能被一个consumer消费
广播: 把每一个consumer都建立一个独立的consumer group,那么所有的consumer都可以消费到这条消息

交易保证(消息传输和接收方案)

方案
At most once 消息可能会丢,但绝不会重复传输
At least one 消息绝不会丢,但可能会重复传输
Exactly once 每条消息肯定会被传输一次且仅传输一次,很多时候这是用户所想要的。
上游(product->broker)
当Producer向broker发送消息时,一旦这条消息被commit,因数replication的存在,它就不会丢。但是如果Producer发送数据给broker后,遇到网络问题而造成通信中断,那Producer就无法判断该条消息是否已经commit。虽然Kafka无法确定网络故障期间发生了什么,但是Producer可以生成一种类似于主键的东西,发生故障时幂等性的重试多次,这样就做到了Exactly once。截止到目前(Kafka 0.8.2版本,2015-03-04),这一Feature还并未实现,有希望在Kafka未来的版本中实现。(所以目前默认情况下一条消息从Producer到broker是确保了At least once,可通过设置Producer异步发送实现At most once)。
下游(broker->consumer)
consumer读取到broker的消息的时候可以有两种选择
直接commit,通知卡夫卡处理完成,然后继续业务逻辑,这样的好处是不会多次传输,但是数据会丢失,因为有可能在逻辑处理的时候出现crash,那么这条消息就会miss
处理完业务逻辑后再commit,这样数据不会丢失,但是有可能会出现多次重复,因为,如果在业务处理完成,commit之前出现crash,那么下一次去读取的时候还是会去读取该条消息,再次消费,就会出现重复消费的情况

如果一定要做到Exactly once,就需要协调offset和实际操作的输出。精典的做法是引入两阶段提交。如果能让offset和操作输入存在同一个地方,会更简洁和通用。这种方式可能更好,因为许多输出系统可能不支持两阶段提交。比如,Consumer拿到数据后可能把数据放到HDFS,如果把最新的offset和数据本身一起写到HDFS,那就可以保证数据的输出和offset的更新要么都完成,要么都不完成,间接实现Exactly once。(目前就high level API而言,offset是存于Zookeeper中的,无法存于HDFS(分布式文件系统),而low level API的offset是由自己去维护的,可以将之存于HDFS中)

消息地址问题

发布消息和消费消息都需要知道消息需要放到哪里,需要知道消息在哪
发布消息的时候,需要把消息放入到partition中,这个partition有一个地址参数offset(set->不可重复)
卡夫卡的消息无论是否已经消费,是不会进行删除的
consumer消费消息是根据offset去消费的,理论是每次消费过后都会递增该consumer持有的offset,也就是可以消费下一条消息
故此我们可以把consumer持有的offset值改小来再次消费某些消息,如果你需要的话

更多关于卡夫卡是如何存储消息的,查看该博文

时间: 2024-10-30 15:22:17

kafka组件简介的相关文章

PHP开发框架Yii Framework教程(22) UI组件 Zii组件简介

前面介绍了Yii框架支持的部分UI组件,除了前面介绍的UI组件外,Yii框架还提供了Zii组件库,包括列表视图ListView,表 格视图GridView,此外还包括一些基于JQuery的UI组件,如AutoComplete,DataPicker, Button, Drag 和 Drop等,Zii组件主要 定义在包zii.* ,zii.widget.* 开发框架Yii Framework教程(22) UI组件 Zii组件简介-yii2 user组件"> 由于其中部分UI组件和数据源(Dat

如何在E-MapReduce上使用引导操作安装kafka组件

1. 什么是引导操作 关于E-MapReduce上引导操作的概念和使用方式请参考文档. 2. 编写安装Kafka组件的脚本 在E-MapReduce中编写安装Kafka组件脚本主要有以下几步: 下载Kafka-0.10.0.0安装包 修改Kafka配置文件 创建Kafka Log目录 启动Kafka daemon进程 以下是安装Kafka组件的脚本简单示例: #!/bin/bash isMaster=`hostname --fqdn | grep emr-header` if [ -n "$is

Spring 三大基础组件简介

    一,Bean,Core,Context关系   在Spring的各种组件中,Bean,Core,Context算是基础组件(ExpressionLanguage表达式支持, 这个主要就是用来支持一些spring XML配置文件表达式 和 注解中一些表达式解析,让配置有动态特性,spring早期的版本是没有这货的,不算是特别必须的, 特别核心的东西,只是为了灵活性加的),在Core container这一层构建起了整个Spring的骨骼架构.在Spring中,强调的是对Bean的管理 ,所

JSP表单自动数据验证组件简介

js|数据 从jsp到servlet或者action过程中还有很多需要处理的事情:数据有效性验证包括jsp页面的javascript验证和服务器端的验证.对文件上传的处理.文件上传大小的控制.防止二次提交.multipart form的非文件字段的处理.这些事情不属于jsp也不属于action,我们的开发人员会把这些事情直接在jsp里处理或者交给了action处理,当然如果采用了mvc框架来开发的话,有些mvc框架包含了对这部分的处理. 比较著名的有struts的formbean和webwork

JSP的九种基本内置组件简介

js JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): request 用户端请求,此请求会包含来自GET/POST请求的参数 response 网页传回用户端的回应 pageContext 网页的属性是在这里管理 session 与请求有关的会话期 application servlet 正在执行的内容 out 用来传送回应的输出 config servlet的构架部件 page JSP网页本身 exception 针对错误网页,未捕捉的例外 可以使用它们来存取执行JSP代码

开启云之旅:OpenStack组件简介

随着越来越多的企业考虑选择不同的私有云平台,组织了解开源的OpenStack与市场上其他流行的云计算软件之间的区别是很重要的.本文我将介绍OpenStack和一些必备的OpenStack组件. OpenStack生态系统 OpenStack和Amazon EC2非常类似,两大平台都允许用户使用仪表盘或者API部署虚拟机.除OpenStack免费之外,两大产品的重大差别是Amazon EC2是一个公有云服务,而OpenStack允许你构建自己的私有云或者订阅OpenStack公有云厂商的服务. O

什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)

1. HADOOP背景介绍 1. 1.1什么是HADOOP 1.        HADOOP是apache旗下的一套开源软件平台 2.        HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.        HADOOP的核心组件有 A.       HDFS(分布式文件系统) B.       YARN(运算资源调度系统) C.       MAPREDUCE(分布式运算编程框架) 4.        广义上来说,HADOOP通常是指一个更

Android安全开发之Provider组件安全

Android安全开发之Provider组件安全 作者:伊樵.呆狐@阿里聚安全 一.Content Provider组件简介 Content Provider组件是Android应用的重要组件之一,管理对数据的访问,主要用于不同的应用程序之间实现数据共享的功能.Content Provider的数据源不止包括SQLite数据库,还可以是文件数据.通过将数据储存层和应用层分离,Content Provider为各种数据源提供了一个通用的接口. 创建一个自己的Content Provider需要继承

Discuz! QQ互联新增“分享到QQ“组件 让网站回流加倍

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 3.12日消息,Discuz! QQ互联功能更新,新推出"分享到QQ"组件.下面新组件功能介绍: 一."分享到QQ"组件简介 "分享到QQ" 是QQ互联分享组件的重要基础功能之一, 使用方法与"分享到QQ空间"类似. 网站只需要在页面上嵌入一段简单的代码,便可让用