前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kafka环境安装-基于windows

kafka环境安装-基于windows

作者头像
逍遥壮士
发布2021-04-13 14:40:32
4450
发布2021-04-13 14:40:32
举报
文章被收录于专栏:技术趋势

kafka是什么?

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。--百度百科

参考:https://baike.baidu.com/item/Kafka/17930165?fr=aladdin

中文官网:https://kafka.apachecn.org/

kafka的特性

Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。

对于每一个topic, Kafka集群都会维持一个分区日志,如下所示:

每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。

Kafka 集群保留所有发布的记录—无论他们是否已被消费—并通过一个可配置的参数——保留期限来控制. 举个例子, 如果保留策略设置为2天,一条记录发布后两天内,可以随时被消费,两天过后这条记录会被抛弃并释放磁盘空间。Kafka的性能和数据大小无关,所以长时间存储数据没有什么问题.

事实上,在每一个消费者中唯一保存的元数据是offset(偏移量)即消费在log中的位置.偏移量由消费者所控制:通常在读取记录后,消费者会以线性的方式增加偏移量,但是实际上,由于这个位置由消费者控制,所以消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。

这些细节说明Kafka 消费者是非常廉价的—消费者的增加和减少,对集群或者其他消费者没有多大的影响。比如,你可以使用命令行工具,对一些topic内容执行 tail操作,并不会影响已存在的消费者消费数据。

日志中的 partition(分区)有以下几个用途。第一,当日志大小超过了单台服务器的限制,允许日志进行扩展。每个单独的分区都必须受限于主机的文件限制,不过一个主题可能有多个分区,因此可以处理无限量的数据。第二,可以作为并行的单元集—关于这一点,更多细节如下

分布式

日志的分区partition (分布)在Kafka集群的服务器上。每个服务器在处理数据和请求时,共享这些分区。每一个分区都会在已配置的服务器上进行备份,确保容错性.

每个分区都有一台 server 作为 “leader”,零台或者多台server作为 follwers 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。每台 server 都会成为某些分区的 leader 和某些分区的 follower,因此集群的负载是平衡的。

生产者

生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 partition(分区)中。可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。下面会介绍更多关于分区的使用。

消费者

消费者使用一个 消费组 名称来进行标识,发布到topic中的每条记录被分配给订阅消费组中的一个消费者实例.消费者实例可以分布在多个进程中或者多个机器上。

如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例.

如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程.

如图,这个 Kafka 集群有两台 server 的,四个分区(p0-p3)和两个消费者组。消费组A有两个消费者,消费组B有四个消费者。

通常情况下,每个 topic 都会有一些消费组,一个消费组对应一个"逻辑订阅者"。一个消费组由许多消费者实例组成,便于扩展和容错。这就是发布和订阅的概念,只不过订阅者是一组消费者而不是单个的进程。

在Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上,以便在任何时间,每个实例都是分区唯一的消费者。维护消费组中的消费关系由Kafka协议动态处理。如果新的实例加入组,他们将从组中其他成员处接管一些 partition 分区;如果一个实例消失,拥有的分区将被分发到剩余的实例。

Kafka 只保证分区内的记录是有序的,而不保证主题中不同分区的顺序。每个 partition 分区按照key值排序足以满足大多数应用程序的需求。但如果你需要总记录在所有记录的上面,可使用仅有一个分区的主题来实现,这意味着每个消费者组只有一个消费者进程。

保证

high-level Kafka给予以下保证:

生产者发送到特定topic partition 的消息将按照发送的顺序处理。也就是说,如果记录M1和记录M2由相同的生产者发送,并先发送M1记录,那么M1的偏移比M2小,并在日志中较早出现

一个消费者实例按照日志中的顺序查看记录.

对于具有N个副本的主题,我们最多容忍N-1个服务器故障,从而保证不会丢失任何提交到日志中的记录.

关于保证的更多细节可以看文档的设计部分。

kafka可以做什么?

Kafka作为消息系统

Kafka 作为存储系统

zuoKafka用作流处理

批处理

总之kafka高性能、低延迟、具备日志存储、备份和传播功能的分布式文件系统。

详细可以参照:https://kafka.apache.org/documentation/#design

kafka基于windows10安装

先启用kafka自带的zk

代码语言:javascript
复制
zookeeper-server-start.bat ..\..\config\zookeeper.properties

下载安装kafka

下载:http://kafka.apache.org/downloads

配置kafka

\kafka_2.12-2.7.0\config\server.properties 将log.dirs 改为自已的地址

代码语言:javascript
复制
log.dirs=D:\tools\kafka_2.12-2.7.0\logs

启动kafka

代码语言:javascript
复制
.\bin\windows\kafka-server-start.bat .\config\server.properties

结果

创建topic

代码语言:javascript
复制
kafka-topics.bat --create --replication-factor 1 
--partitions 1 
--topic hong --zookeeper localhost:2181

注:

kafka-topics.bat 为topicat创建bat

--create 为创建指令

--zookeeper localhost:2181 提定zk 地址和端口为localhost:2181

--replication-factor 1 1个副本 就是只保存一份

--partitions 1 1个分区

--topic 指定topic

hong topic名称为hong

查看节点

代码语言:javascript
复制
kafka-topics.bat --list --zookeeper localhost:2181

启用Producer 生产数据(新窗口)

代码语言:javascript
复制
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic hong

启用consumer 生产数据(新窗口)

代码语言:javascript
复制
kafka-console-consumer.bat --zookeeper localhost:2181 --topic hong

生产与消费结果

设置多代理集群

复制多个server.properties server2.properties server3.properties

配置如下:

server.properties

代码语言:javascript
复制
broker.id=1
listeners=PLAINTEXT://localhost:9092
log.dirs=D:\\tools\\kafka_2.12-2.7.0\\logs

server2.properties

代码语言:javascript
复制
broker.id=2
listeners=PLAINTEXT://localhost:9093
log.dirs=D:\\tools\\kafka_2.12-2.7.0\\logs2

server3.properties

代码语言:javascript
复制
broker.id=3
listeners=PLAINTEXT://localhost:9094
log.dirs=D:\\tools\\kafka_2.12-2.7.0\\logs3

然后再启动另外两个节点

启动2节点

代码语言:javascript
复制
.\bin\windows\kafka-server-start.bat .\config\server2.properties &

启动3节点

代码语言:javascript
复制
.\bin\windows\kafka-server-start.bat .\config\server3.properties &

创建一个3副本的topic=hong2

代码语言:javascript
复制
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 
--partitions 1 
--topic hong2

查看topic详细

代码语言:javascript
复制
bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic hong2

--describe 详细命令

--zookeeper localhost:2181 zk地址和端口

--topic hong2 topic为hong2

“leader”是负责给定分区所有读写操作的节点。每个节点都是随机选择的部分分区的领导者。

“replicas”是复制分区日志的节点列表,不管这些节点是leader还是仅仅活着。

“isr”是一组“同步”replicas,是replicas列表的子集,它活着并被指到leader。

查看源来 topic=hong

bin\windows\kafka-topics.bat --describe --zookeeper localhost:2181 --topic hong

启用3个消费者,1个生产者进行集群测试

消费

代码语言:javascript
复制
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic hong2 --from-beginning
代码语言:javascript
复制
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9093 --topic hong2 --from-beginning
代码语言:javascript
复制
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9094 --topic hong2 --from-beginning

生产

代码语言:javascript
复制
bin\windows\kafka-console-producer.bat  --broker-list 127.0.0.1:9092,127.0.0.1:9093,127.0.0.1:9094  --topic hong2

结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档