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. Java实现多文件压缩打包的方法

    package com.biao.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu ...

  2. Struts2——(3)ValueStack(值栈)

    一.ValueStack 主要用于存储请求相关信息,内部结构如下 root区:被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象. context区:被称为变量存储区,是一个Map结构 ...

  3. Smarty优缺点

    Smarty优点: 1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的. 2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PH ...

  4. C# Span 入门

    原文:C# Span 入门 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客.本 ...

  5. Linux在出现/java: cannot execute binary file

    位这样的情况下通常的虚拟机(32和64)不匹配造成的.再次,你的虚拟机下一场比赛JDK的版本号的 在与X64它是64位置,另32位置 版权声明:本文博主原创文章.博客,未经同意不得转载.

  6. Socket实现原理和机制

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  7. 简明Python3教程 19.附录 FLOSS

    FLOSS Free/Libre and Open Source Software, in short, FLOSS is based on the concept of a community, w ...

  8. java中的switch结构

     switchkeyword的中文意思是开关.转换的意思,switch语句在条件语句中特别适合做一组变量相等的推断,在结构上比if语句要清晰非常多.switch语句的语法格式为:switch(表达式) ...

  9. 嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板

    嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板 涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付. 有几个概念如下:(priority invers ...

  10. JQuery在一个简单的表单验证的例子

    html代码例如以下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...