什么是Kafka?
通过Kafka的快速入门 https://www.cnblogs.com/tree1123/p/11150927.html
能了解到Kafka的基本部署,使用,但他和其他的消息中间件有什么不同呢?
Kafka的基本原理,术语,版本等等都是怎么样的?到底什么是Kafka呢?
一、Kafka简介
2011年,LinkIn开源, November 1, 2017 1.0版本发布 July 30, 2018 2.0版本发布
参考官网的图:
Kafka®用于构建实时数据管道和流式应用程序。它具有水平可扩展性、容错性、速度极快,并在数千家公司投入生产。
kafka官网最新的定义:Apache Kafka® is a distributed streaming platform
也就是分布式流式平台。
介绍:
三个特点:
- Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
- Store streams of records in a fault-tolerant durable way.
- Process streams of records as they occur.
消息 持久化 流处理
两类应用:
Building real-time streaming data pipelines that reliably get data between systems or applications
Building real-time streaming applications that transform or react to the streams of data
实时流数据管道 实时流应用程序
几个概念
Kafka is run as a cluster on one or more servers that can span multiple datacenters.
The Kafka cluster stores streams of records in categories called topics.
Each record consists of a key, a value, and a timestamp
集群 topic record
四个核心api
- The Producer API allows an application to publish a stream of records to one or more Kafka topics.
- The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.
- The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams.
- The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table.
Producer API Consumer API Streams API Connector API
客户端服务器通过tcp协议 支持多种语言
主题和日志
一个主题可以有零个,一个或多个消费者订阅写入它的数据
对于每个主题,Kafka群集都维护一个分区日志
每个分区都是一个有序的,不可变的记录序列,不断附加到结构化的提交日志中。
分区中的记录每个都被分配一个称为偏移的顺序ID号,它唯一地标识分区中的每个记录。
Kafka集群持久地保留所有已发布的记录 - 无论它们是否已被消耗 - 使用可配置的保留期。可以配置这个时间。
Kafka的性能在数据大小方面实际上是恒定的,因此长时间存储数据不是问题。
每个消费者保留的唯一元数据是该消费者在日志中的偏移或位置。
这种偏移由消费者控制:通常消费者在读取记录时会线性地提高其偏移量,但事实上,由于消费者控制位置,它可以按照自己喜欢的任何顺序消费记录。例如,消费者可以重置为较旧的偏移量以重新处理过去的数据,或者跳到最近的记录并从“现在”开始消费。
这使得消费者特别容易使用。
生产者:
生产者将数据发布到他们选择的主题。
为了负载均衡,可以选择多个分区。
消费者:
消费者组
传统的消息队列 发布订阅 都有弊端
队列可以扩展但不是多用户,发布订阅每条消费发给每个消费者,无法扩展。
但是kafka这个模式 解决了这些问题
kafka确保使用者是该分区的唯一读者并按顺序使用数据,由于有许多分区,这仍然可以
平衡许多消费者实例的负载。
作为存储系统
作为流处理系统
二、常见使用
消息
Kafka可以替代更传统的消息代理。消息代理的使用有多种原因(将处理与数据生成器分离,缓冲未处理的消息等)。与大多数消息传递系统相比,Kafka具有更好的吞吐量,内置分区,复制和容错功能,这使其成为大规模消息处理应用程序的理想解决方案。
根据我们的经验,消息传递的使用通常相对较低,但可能需要较低的端到端延迟,并且通常取决于Kafka提供的强大的耐用性保证。
在这个领域,Kafka可与传统的消息传递系统(如ActiveMQ或 RabbitMQ)相媲美。
网站活动跟踪
站点活动(页面查看,搜索或用户可能采取的其他操作)发布到中心主题,每个活动类型包含一个主题。实时处理,实时监控以及加载到Hadoop或离线数据仓库系统以进行离线处理和报告。
度量
Kafka通常用于运营监控数据。
日志聚合
许多人使用Kafka作为日志聚合解决方案的替代品。日志聚合通常从服务器收集物理日志文件,并将它们放在中央位置(可能是文件服务器或HDFS)进行处理。Kafka抽象出文件的细节,并将日志或事件数据更清晰地抽象为消息流。
流处理
从0.10.0.0开始,这是一个轻量级但功能强大的流处理库,名为Kafka Streams
三、官方文档-核心机制
http://kafka.apache.org/documentation/
简介 使用 快速入门 都已经学习过了
生态:这里有一些kafka的生态,各种Connector 可以直接连接数据库 es等等 还可以连接其他的流处理 还有各种管理工具
confluent公司 专门做kafka的生态
https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem
kafka connect stream management
kafka考虑的几个问题:
吞吐量: 用到了page cache 并不是硬盘读写
消息持久化: 这个还是靠他独特的offset设计
负载均衡:分区副本机制
由于应用 零拷贝技术 客户端应用epoll 所以kafka部署在linux上性能更高。
消息:kafka的消息由 key value timestamp组成 消息头里定义了一些压缩 版本号的信息
crc 版本号 属性 时间戳 长度 key长度 key value长度 value
用的是二进制 不用java类
topic和partition:
这是kafka最核心,也是最重要的机制,这个机制让他区别于其他。
offset是指某一个分区的偏移量。
topic partition offset 这三个唯一确定一条消息。
生产者的offset其实就是最新的offset。
消费者的offset是他自己维护的,他可以选择分区最开始,最新,也可以记住他消费到哪了。
消费者数大于分区,就会有消费者空着。 消费者数小于分区,就会均衡消费。
因为kafka的设计是在一个partition上是不允许并发的,所以consumer数不要大于partition数 ,浪费。
如果consumer从多个partition读到数据,不保证数据间的顺序性,kafka只保证在一个partition上数据是有序的,但多个partition,根据你读的顺序会有不同。
增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化 。
消费者组是为了不同组的消费者可以同时消费一个分区的消息。
replica
这是为了防止服务器挂掉。
分为两类 leader replica 和 follow replica
只有 leader replica会响应客户端。
一旦leader replica所在的broker宕机,会选出新的leader。
kafka保证一个partition的多个replica一定不会分配到同一台broker上。
follow与leader实时同步。
ISR
in-sync replica 与leader replica保持同步的replica集合
正常时,所有的replica都在ISR中,但如果响应太慢,就会踢出ISR。之后追上来再加进来。
ISR中至少有一个replica是活着的。
ISR中所有replica都收到消息,这个消息才是已提交状态。
更多实时计算相关技术博文,欢迎关注实时流式计算
什么是Kafka?的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- .net windows Kafka 安装与使用入门(入门笔记)
完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS 在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...
- kafka配置与使用实例
kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列
- kafka源码分析之一server启动分析
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...
- Kafka副本管理—— 为何去掉replica.lag.max.messages参数
今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...
- Kafka:主要参数详解(转)
原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...
- kafka
2016-11-13 20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...
- Spark Streaming+Kafka
Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...
随机推荐
- kuangbin专题 专题一 简单搜索 Fire Game FZU - 2150
题目链接:https://vjudge.net/problem/FZU-2150 题意:’ . '代表火无法烧着的地方,‘ # ’表示草,火可以烧着.选择任意两个‘ # ’(可以两个都选同一个 ‘ # ...
- spark 源码分析之十四 -- broadcast 是如何实现的?
本篇文章主要剖析broadcast 的实现机制. BroadcastManager初始化 BroadcastManager初始化方法源码如下: TorrentBroadcastFactory的继承关系 ...
- [原创]SSH Tunnel for UDP
SSH Tunnel for UDP UDP port forwarding is a bit more complicated. We will need to convert the packet ...
- win10修改桌面图标之间的距离
操作方法01首先用Win+R组合键打开运行界面,在界面的输入框中输入regedit命令,打开注册表. 02在打开的注册表界面中我们找到HKEY_Current_User下的Control Panel文 ...
- 个人永久性免费-Excel催化剂功能第17波-批量文件改名、下载、文件夹创建等
前几天某个网友向我提出催化剂的图片功能是否可以增加导出图片功能,这个功能我一直想不明白为何有必要,图片直接在电脑里设个文件夹维护着不就可以了么?何苦还要把Excel上的图片又重新导出到文件夹中?这个让 ...
- springBean生命周期----来自spring实战总结
1.Spring对bean进行实例化 2.Spring将值和bean的引用注入到bean对应的属性中(比如说注入到被依赖的bean的方法中或属性里) 3.如果bean实现了BeanNameAware接 ...
- Shiro授权流程
1,授权中涉及的一些概念 [1]授权:访问控制,即在应用中认证用户能否访问的系统资源(如一个页面,一个按钮等). [2]资源:在Web应用中反应为用户可以访问的URL. ...
- C#8.0 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C#8.0提供了许多增强功能 01 Readonly 成员 可将 readonly 修饰符应用于结构的任何成员. 它指示该成员不会修改状态. 这比 ...
- python基础练习 dict切片
利用切片操作,实现一个trim()函数,去除字符串首尾的空格 def trim(s): if s[:1] != ' ' and s[-1:] != ' ': return s elif s[:1] = ...
- sql LocalDB 的安装环境和使用方法
LocalDB LocalDB专门为开发商.它是非常容易安装,无需管理,但它提供了相同的T-SQL语言,编程表面和客户端供应商定期的SQL Server Express.实际上,目标SQL Serve ...