Kafka是一款基于发布和订阅的消息系统。一般被称为分布式提交日志或分布式流平台。

Kafka系统是按照一定的顺序持久化保存的,可以按需读取。

Kafka的数据单元被称为消息。类似于数据库中表的一行记录,消息由字节组成,所以没有特别的格式和含义。

消息有一个可选的元数据,就是键,键也是一个字节数组。当消息以一种可控的方式写入分区时,会用到键,最简单的方式就是为键生成一个散列值,然后使用散列值对主题的分区属进行取模。这样可以保证具有相同键的消息总是会写到相同的分区。

批次时一组消息,这些消息属于同一个主题和分区,将消息分批次传输可以减少网络开销。

消息模式有很多选项,比如json,xml,但Kafka的开发者喜欢使用Apache Avro。

Kafka的消息通过主题进行分类,主题就好比数据库中的表。或者文件系统中的文件夹。

主题还可以分成若干个分区,消息以追加方式写入分区,按照先入先出的顺序被消费,因此无法在整个主题范围内保持顺序,但可以保证在单个分区内的顺序。

Kafka通过分区实现数据冗余和伸缩性,分区可分布在不同的服务器上,以此来提供比单个服务器更强大的性能。

通常使用流来描述Kafka的数据,流是一组从生产者到消费者的数据。Kafka以实时的方式处理数据,这叫流失处理,通常与批量处理(Hadoop)做区别。

Kafka的客户端就是Kafka的用户,他们被分为两种:生产者和消费者。除此之外还有其他高级客户端API——用于数据集成的Kafka Connect API和用于流失处理的Kafka streams.这些高级客户端API使用生产者和消费者作为内部组件,提供了更高级的功能。

生产者创建消息,一般一个消息会被发布到一个特定的主题上,生产者默认会把消息均衡地分布到主题的所有分区,这通常是由消息键和分区器来实现。

消费者读取消息,消费者订阅一个或多个主题,并按照消息生成的顺序消费它们。消费者通过检查消息的偏移量来区分已经读过的消息。偏移量是另一种元数据,它是一个不断递增的整数值。在创建消息时,Kafka会把它添加到消息里,在给定分区里,每个消息的偏移量都是唯一的。

消费者把每个分区最后读取的偏移量保存到zookeeper或Kafka上,如果消费者关闭或者重启,它的读取状态不好丢失。

消费者是消费者群组的一部分,一般会有多个消费者共同读取一个主题,群组保证每个分区只被一个消费者使用。

一个独立的Kafka服务器称为一个broker,broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出响应,返回提交到磁盘上的消息。

broker是集群的组成部分,每个集群都会有一个broker充当集群控制器角色(自动选举),控制器负责管理工作。在集群中,一个分区从属于一个broker,该broker被称为分区的首领,一个分区可以复制到多个broker,这种复制机制为分区提供了消息冗余。

保留消息时Kafka的一个重要特性,默认的保留策略时这样的:要么保留一段时间,要么保留一定的字节数。在任一时刻,达到其中一个标准,消息就会被删除。

Kafka可以无缝支持多个生产者,也可以支持多个消费者。

Kafka有五个使用场景:

1.跟踪用户的活动。

2.传递消息。

3.度量指标和日志记录。

4.提交日志。

5.流处理。

kafka笔记1的更多相关文章

  1. Kafka笔记整理(三):消费形式验证与性能测试

    Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: .每个consumer属于一个consumer group,可以指定组id.group.id ...

  2. Kafka笔记整理(一)

    Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...

  3. Kafka笔记—可靠性、幂等性和事务

    这几天很忙,但是我现在给我的要求是一周至少要出一篇文章,所以先拿这篇笔记来做开胃菜,源码分析估计明后两天应该能写一篇.给自己加油~,即使没什么人看. 可靠性 如何保证消息不丢失 Kafka只对&quo ...

  4. Kafka笔记

    最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...

  5. kafka笔记-Kafka在zookeeper中的存储结构【转】

    参考链接:apache kafka系列之在zookeeper中存储结构  http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...

  6. Kafka笔记--指定消息的partition规则

    参数的设定:参考资料 不错的资料:http://blog.csdn.net/honglei915/article/details/37697655 http://developer.51cto.com ...

  7. Kafka笔记--监控系统KafkaOffsetMonitor

    KafkaOffsetMonitor下载链接: http://download.csdn.net/detail/changong28/7930337github官方:https://github.co ...

  8. Kafka笔记--使用ubuntu为bocker(服务器)windows做producer和comsumer(客户端)

    原文连接:http://www.cnblogs.com/davidwang456/p/4201875.html 程序仍然使用之前的一篇博文中的例子 :http://www.cnblogs.com/gn ...

  9. Kafka笔记--参数说明及Demo

    参考资料:http://blog.csdn.net/honglei915/article/details/37563647参数说明:http://ju.outofmemory.cn/entry/119 ...

  10. Kafka笔记--分布式环境搭建

    部署: http://www.cnblogs.com/likehua/p/3999538.html http://blog.csdn.net/kimmking/article/details/8263 ...

随机推荐

  1. visual studio 2015安装win10 SDK文件校验错误的解决方法

    这段时间想看一下UWP开发,于是下载了visual 2015 update1社区版,但是在安装完成时提示,windows 10 sdk文件校验码错误,如下图(图片是借用的,我当时没有截屏,错误号是一样 ...

  2. 十分钟了解 spring cloud

    1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB.KV,去掉重量级ESB),并且强调DevOps和快 ...

  3. Struts2——(2)配置文件、通配符

    一.Struts配置文件 (1)struts-default.xml(框架自带) 定义了一些框架自带的Result组件,拦截器组件. <package name="struts-def ...

  4. 树莓派挂载移动硬盘开启samba

    本文参考 [https://blog.csdn.net/u010906068/article/details/38455363],原文部分步骤在我的树莓派上,可能是版本不同吧,进行了修改后部署成功 一 ...

  5. windows 下 TensorFlow(GPU 版)的安装

    windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速 0. 环境 OS:Windows 10,64 bit: 显卡:NVIDIA GeFor ...

  6. python 合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.   样例 给出 1->3->8->11->15->null,2-& ...

  7. MVC模式简单介绍

    模型-视图-控件(model-View-Controller)MVC结构是一种开发模块的方法,它将数据存储和数据处理从数据的可视化表示中分离出来.存储和处理数据的组件称为模型,它包括模块的实际内容.表 ...

  8. 初步STL该容器适配器

    容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...

  9. FFmpeg来源简单分析:结构会员管理系统-AVClass

    ===================================================== FFmpeg章列表: [架构图] FFmpeg源码结构图 - 解码 FFmpeg源码结构图 ...

  10. MVC基架生成的Index视图

    @model IEnumerable<MyMusicStore.Models.Album> @{     ViewBag.Title = "Index"; } < ...