初识Kafka

Kafka是什么?

  是一个分布式消息系统
  类JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者主动拉取数据。
  kafka是一个生产-消费模型。

一些名词:
  Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中。
数据的分发策略由producer决定,默认是defaultPartition。
  Consumer:消费者,订阅消息并处理发布消息。
  Broker:当前服务器上的Kafka进程,相当于中介,一个Kafka节点就是一个broker,只管数据存储,不管是谁生产,不管是谁消费。
在集群中每个broker都有一个唯一brokerid,不得重复。
  Topic:Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每一个topic又可以分成几个不同的partition
(每一个topic有几个partition是在创建topic时指定的),每一个partition存储一部份Message。
  Partition:topic物理上的分组,同一个topic下有多个不同partition,每个partition为一个目录,partition物理上由多个segment组成(index,log)
每个partition可以设置多个副本(replication-factor 1),会从所有的副本中选取一个leader出来。所有读写操作都是通过leader来进行的。
特别强调,和mysql中主从有区别,mysql做主从是为了读写分离,在kafka中读写操作都是leader。
  每个partition是一个有序的队列,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。如果是多broker分布情况:参考http://blog.csdn.net/lizhitao/article/details/41778193
  Segment:Partition物理上由多个segment组成,一个segment有默认的大小是1G。
segment file由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件。
  Message:Partition中的每条Message由offset来表示它在这个partition中的偏移量,这个offset不是该Message在partition数据文件中的实际存储位置,而是逻辑上1个值,它唯一肯定了partition中的一条Message。因此,可以认为offset是partition中Message的id。partition中的每条Message包括了以下3个属性:offset(long型),MessageSize(int32,表示data有多大),data(message的具体内容)
  ConsumerGroup:数据消费者组,ConsumerGroup可以有多个,每个ConsumerGroup消费的数据都是一样的。可以把多个consumer线程划分为一个组,组里面所有成员共同消费一个topic的数据,组员之间不能重复消费。

Kafka如何保证数据的完全生产

  ack机制:broker表示发来的数据已确认接收无误,表示数据已经保存到磁盘。
  0:不等待broker返回确认消息
  1:等待topic中某个partition leader保存成功的状态反馈
  -1:等待topic中某个partition 所有副本都保存成功的状态反馈

broker如何保存数据

  在理论环境下,broker按照顺序读写的机制,可以每秒保存600M的数据。主要通过pagecache机制,尽可能的利用当前物理机器上的空闲内存来做缓存。
  当前topic所属的broker,必定有一个该topic的partition,partition是一个磁盘目录。partition的目录中有多个segment组合(index,log)

consumerGroup的组员和partition之间如何做负载均衡

  最好是一一对应,一个partition对应一个consumer。
  如果consumer的数量过多,必然有空闲的consumer。
  算法:
    假如topic1,具有如下partitions: P0,P1,P2,P3
    加入group中,有如下consumer: C1,C2
    首先根据partition索引号对partitions排序: P0,P1,P2,P3
    根据consumer.id排序: C0,C1
    计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)
    然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]

如何保证kafka消费者消费数据是全局有序的

  伪命题
  如果要全局有序的,必须保证生产有序,存储有序,消费有序。
  由于生产可以做集群,存储可以分片,消费可以设置为一个consumerGroup,要保证全局有序,就需要保证每个环节都有序。
  只有一个可能,就是一个生产者,一个partition,一个消费者。这种场景和大数据应用场景相悖。

参考文档

  kafka中文教程

  Kafka Shell基本命令(包括topic的增删改查)

时间: 2024-08-30 12:23:56

初识Kafka的相关文章

初识 Kafka Producer 生产者

目录 1.KafkaProducer 概述 2.KafkaProducer 类图 3.KafkaProducer 简单示例 温馨提示:整个 Kafka Client 专栏基于 kafka-2.3.0 版本. @(本节目录) 1.KafkaProducer 概述 根据 KafkaProducer 类上的注释上来看 KafkaProducer 具有如下特征: KafkaProducer 是线程安全的,可以被多个线程交叉使用. KafkaProducer 内部包含一个缓存池,存放待发送消息,即 Pro

【转帖】我以为我对Kafka很了解,直到我看了这篇文章

我以为我对Kafka很了解,直到我看了这篇文章 2019-08-12 18:05 https://www.sohu.com/a/333235171_463994?spm=smpc.author.fd-d.8.1566085247069VrdDx7I 原来kafka 是 linkedin 搞出来的 只是听说过 需要实践才可以啊. Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础.

源码分析 Kafka 消息发送流程(文末附流程图)

温馨提示:本文基于 Kafka 2.2.1 版本.本文主要是以源码的手段一步一步探究消息发送流程,如果对源码不感兴趣,可以直接跳到文末查看消息发送流程图与消息发送本地缓存存储结构. 从上文 初识 Kafka Producer 生产者,可以通过 KafkaProducer 的 send 方法发送消息,send 方法的声明如下: Future<RecordMetadata> send(ProducerRecord<K, V> record) Future<RecordMetada

Kafka 初识

1.Kafka 是什么? 用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统. 倘若“消息引擎系统“这个词对你来说有点陌生的话,那么“消息队列“.“消息中间件”的提法想必你一定是有所耳闻的.不过说实话我更愿意使用消息引擎系统这个称谓,因为消息队列给出了一个很不明确的暗示,仿佛 Kafka 是利用队列的方式构建的:而消息中间件的提法有过度夸张“中间件”之嫌,让人搞不清楚这个中间件到底是做什么的. 像 Kafka 这一类的系统国外有专属的名字叫 Messaging System,国

初识Apache Kafka+JAVA程序实例

本文是从英文的官网摘了翻译的,用作自己的整理和记录.水平有限,欢迎指正.版本是: kafka_2.10-0.10.0.0 一.基础概念 主题:Kafka maintains feeds of messages in categories called topics. 生产者:We'll call processes that publish messages to a Kafka topic producers. 消费者:We'll call processes that subscribe t

kafka初识

1.what is kafka kafka是一个开源的消息队列,其特点: (1) 快,可以支持几百兆每秒的数据,以及成千上万个client. (2)   快速扩展 (3)数据都会在磁盘中持久化 2. kafka的特性 IO (1) 写只允许append (2) 读取操作不会block写操作 (3)充分利用机械盘的特点,机械臂的移动速度比较缓慢,如果只是用apeend的操作,那么机械臂的摇摆时间就会大量的被缩短,从而节省大量的时间. Design Strategy (1) Pull VS Push

初识中间件之消息队列

初识中间件之消息队列 测试那点事儿 测试那点事儿 初识中间件之消息队列 1 消息队列概述 消息队列是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,以实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统中不可缺少的中间件. 目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等,比如我之前用过的RabbitMQ以及kafka. 2 消息队列应用场景 在实际应用中,消息队列常用于异步处理.应用解耦.流量削锋

Kafka【第一篇】Kafka集群搭建

Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户的搜索关键词进行统计,分析出当前的流行趋势 有些数据,存储数据库浪费,直接存储硬盘效率又低 这些场景都有一个共同点: 数据是又上游模块产生,上游模块,使用上游模块的数据计算.统计.分析,这个时候就可以使用消息系统,尤其是分布式消息系统! 2.Kafka的定义 What is Kafka:它是一个分布

由内搜推送思考Kafka 的原理

刚入公司的两周多,对CDX项目有了进一步的认识和理解,在这基础上,也开始了解部门内部甚至公司提供的一些中间服务.CDX项目中涉及到的二方服务和三方服务很多,从之前写过的SSO,Auth,到三方图库的各个接口,以及图片存储的云服务Gift,以及今天说到的内搜系统. 由于内搜推送信息是到一个kafka队列中消费,虽然作为业务开发不涉及消息中间件的建设,但还是希望能了解内部选型的一些思想,一点一点学习和理解部门的各个服务.这里我也参加了内部的一些分享,想说说自己对Kafka的初识吧. 首先是Kafka