Kafka快速开始

入门

1.简介

Kafka is a distributed streaming platform,kafka是一个分布式流式平台,具有三个关键功能:

1.它允许您发布和订阅记录流。在这方面,它类似于消​​息队列或企业消息系统;

2.它允许您以容错方式存储记录流;

3.它允许您在记录发生时处理记录。

了解几个概念:

1.Kafka作为一个群集在一个或多个服务器上运行;

2.Kafka集群以称为Topic的类别存储记录流;

3.每个记录由一个键,一个值和一个时间戳组成。

来自Kafka官网的一张介绍Kafka的图片:

如上图所示,kafka提供了四个核心的API:

1.Producer API允许应用程序将流记录发布到一个或多个Kafka topics;

2.Consumer API允许应用程序订阅一个或多个topics,并处理为其生成的记录流;

3.Streams API允许应用程序充当流处理器,消耗来自一个或多个topics的输入流并产生到一个或多个输出topics的输出流,有效地将输入流转换为输出流;

4.Connector API允许构建和运行可重用的生产者或消费者,将Kafka topics连接到现有应用程序或数据系统。例如,关系数据库的连接器可能捕获对表的每个更改。

2.Topics and Logs

Topics是发布记录的类别或Feed名称,Topics可以具有零个,一个或多个订阅它的consumers,对于每个Topic,Kafka集群维护一个partition(分区)日志,如下图所示:

每个partition是一个有序的,不可变的记录序列,不断地附加到结构化提交日志。每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它是唯一标记一条消息。

Kafka集群保留所有已发布的记录,不论它们是否已经被消费;日志文件会根据保留策略中配置的时间之后进行删除,比如log文件保留2天,那么两天后文件会被清除,无论其中的消息是否被消费。kafka通过这种简单的手段,来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘IO开支。

每个消费者保留的唯一元数据是消费者在日志中的offset or position。这种偏移由消费者控制,可以按照喜欢的任何顺序来消费记录。例如,消费者可以重置到较旧的偏移以重新处理来自过去的数据或者跳到最近的记录并开始从“Now”消费。

Kafka的consumer是非常轻量级的,他们可以来来去去,对群集或其他消费者没有太大的影响。

日志中的分区有几个目的。首先,它们允许日志扩展到适合单个服务器的大小。每个单独的分区必须适合托管它的服务器,但一个主题可能有许多分区,因此它可以处理任意数量的数据。第二,它们作为并行性的单位。

3.Distribution

日志的partition分布在Kafka集群中的服务器上,每个服务器处理数据并请求共享分区。每个分区都跨越可配置数量的服务器进行复制,以实现容错。

每个partition具有用作“Leader”的一个服务器和充当“follower”的零个或多个服务器。Leader处理partition的所有读取和写入请求,而follower被动地复制Leader。如果Leader失败,其中一个follower将自动成为新的Leader。每个服务器作为其一些partition的Leader和为其他partition的follower,所以负载在集群内是平衡的。

4.Producers

Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于”round-robin”方式或者通过其他的一些算法等。

5.Consumers

Consumers使用consumer group名称标记自己,并且发布到topic的每个记录都会传递到每个订阅consumer group组中的一个Consumer实例。Consumer实例可以在单独的进程中或在单独的机器上。

如果所有Consumer实例具有相同的consumer group,则记录将有效地在Consumer实例上进行负载平衡。

如果所有Consumer实例具有不同的consumer group,则每个记录将被广播到所有Consumer进程。

一个partition中的消息只会被group中的一个consumer消费,不过一个consumer可以消费多个partitions中的消息;kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的,从Topic角度来说,消息不是有序的。

6.Guarantees

kafka做了如下三个保证:

1.发送到partitions中的消息将会按照它接收的顺序追加到日志中;

2.消费者实例按记录存储在日志中的顺序查看记录;

3.对于具有复制因子N的主题,我们将允许最多N-1个服务器故障,而不会丢失提交到日志的任何记录。

快速开始

1.解压进入目录

2.配置启动Zookeeper

配置Zookeeper启动文件conf/zookeeper.properties

启动Zookeeper

2.配置启动kafka

配置kafka启动文件config/server.properties

启动Zookeeper

3.创建Topic

结果:

创建一个名为“test”的Topic,其中包含一个分区和一个副本

运行list topic命令

结果:

列出当前有哪些Topic,结果显示刚刚创建的Test Topic

4.发送消息

运行producer,发送消息到服务器

5.启动consumer

命令行consumer,将消息转储到标准输出

6.配置kafka集群

首先需要将config/server.properties拷贝2份

然后分别进行配置文件修改,修改结果如下:

修改broker.id用来唯一标识每个节点,同时修改各自监听的端口以及log.dirs存放路径

启动kafka集群

创建一个新的Topic,并且指定replication-factor为3

运行”describe topics”命令

结果如下:

PartitionCount:1和ReplicationFactor:3分别是创建topic指定的分区数和备份数

下面一行指定了Topic名称为my-replicated-topic的broker.id=0分区的信息,如果有多个分区,会出现多行;

Leader是指负责这个分区所有读写的节点;Replicas是指这个分区所在的所有节点(不论它是否活着);Isr是Replicas的子集,代表存有这个分区信息而且当前活着的节点。

注:Partition,Leader,Replicas以及Isr指定的值对应的是broker.id

发送消息

启动consumer

通过describe topics命令知道了Leader=1,也就是server1,将它kill掉

运行”describe topics”命令

结果如下:

此时Leader以及换成了broker.id=2,并且Isr中去掉了broker.id=1

再次启动consumer

消息仍然可用于消费,即使之前的Leader以及down

测试log4j写入kafka

1.准备一个工程,然后通过KafkaLog4jAppender忘kafka中写数据

maven:

其中kafka-log4j-appender用来支持log4j写入kafka

log4j.properties

App类

2.启动consumer

3.运行App程序,观察consumer的输出,结果如下:

参考

https://kafka.apache.org/intro

https://kafka.apache.org/quickstart

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容