博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kafka搭建与使用
阅读量:3924 次
发布时间:2019-05-23

本文共 2470 字,大约阅读时间需要 8 分钟。

使用场景

日志收集:收集各种服务的log,通过kafka以统一的接口服务的方式开放给消费者;
消息系统:解耦,缓存消息等;
用户活动跟踪:记录用户浏览网页,搜索,点击等操作;
运营指标:记录运营监控的数据,生产各种操作的反馈,比如报警和报告;
基本概念
Broker:一个kafka就一个Broker,多个Broker组成集群;
Topic:(可以叫主题),kafaka根据主题对消息进行归类,发布到kafka集群的每条消息都需要指定一个主题;
Producer:生产者
Consumer:消费者
ConsumerGroup:每个消费者属于一个特定的消费组,一条消息可以被多个消费组消费,但也只能消费一次,只能由其中的一个消费者来消费;
Partition:分区,物理上的概念,一个主题可以分成多个分区,每个分区的内部有序;
kafka安装步骤:安装jdk,安装zookeeper(kafka虽然有自带的名但是我们最好自己安装一个,便于我们去控制zk);下载kafka( kafka_2.11‐2.4.1.tgz),并解压即可;2.41是kafka的版本,2.11是scala语言的版本。
我们开发不用了解太多配置相关的,但是还是要了解一些重要的配置;
在server.propertis文件中。
重要的配置有:
broker.id 用于搭建集群时,识别的唯一id
listeners:kafka对客户端开放的端口
log.dirs:kafka收到的消息存放地址;
zookpeer.connect:我们安装的zkip端口号的地址;
启动:
先启动zookeeper,再启动kafka;
kafka启动的时候会往zk中注册大量的信息,打开zk即可查看到这些节点信息;
get /brokers 有节点 ids topics seqid
其中ids中一般如果我们只安装了一个kafka,那么此时应该有个节点为0,这个0节点存有大量信息,比如kafka的端口号,ip等等信息;
消费消息
单播消费:一条消息只能被某一个消费者消费模式,
需要让所有的消费者在同一个消费组中即可;
多播消费:一条消息能被多个消费者消费的模式
让所有的消费者都不不通的消费组中即可;
消息的消费是以消费组(ConsumerGroup)为单位与消费者(Consumer)无关,一个组只能接收一次消息。此消息被消费组中的消费者消费后,该组中的其他消费者就无法消费该消息了。
顺序消费
主题中只建立一个分区,分区中只建立一个消费组,消费组中只建立一个消费者。那么就能保证顺序消费。但是违背了使用kafka原本意图。kafka原本就是为了能够高效的处理海量的数据而存在的,这样也能用,但是会降低kafka的效率;
为什么要有分区?
一个主题默认一个分区,但是如果这个主题对应大量的数据的时候,我们kafka的数据要保存一定的时间,如果一个主题只有一个分区,那么这些数据只能作为一个文件放置,如果内存不够放了就很麻烦了。如果我们把一个主题分成多个分区,一个分区作为一个文件存在,我们就可以灵活的将这些文件放在不通的磁盘上(分布式存储)。不通的分区也可以用不通的消费者来消费,也提高了我们消息消费的并行度;其中偏移量是由消费者自己来维护的,并不会让kafka维护,这也是kafka效率高的原因。传统的中间件需要记录消费情况。不同的数据可以存到不同的分区中去;比如订单数据,
分区数据存储方式:分区时一个有序消息序列,每个消息的偏移量在这个分区中都是唯一值,也就是这个消息在分区中的序号,不同分区之间偏移量之间没有关系,可以重复;
文件存储时间:server.propertis文件中的参数log.retention.hours设置我们文件存储时间,默认168h;
文件存储位置,就是我们上面指定的log.dirs下面的文件下;
kafka的分区扩容后就不允许在缩容了;
集群搭建
kafka没有单机和集群的概念,单台的机器也叫做集群,主要是多个分区的概念,这边我们只是说搭建多台机器的集群;
搭建:
复制两个server.properties文件并重新命名,
修改配置:
broker.id=1
listeners=PLATNTEXT://192.168.65.60.9093
log.dir=/usr/local/data/kafka-logs-1
zookeeper.connect=192.168.65.60:2181

broker.id=2

listeners=PLATNTEXT://192.168.65.60.9094
log.dir=/usr/local/data/kafka-logs-2
zookeeper.connect=192.168.65.60:2181

broker.id是唯一值必然不一样,ip地址必然也不一样,日志地址也要不一样,zookeeper可以用同一个;意思就是把zk配成一个就相当于多台机器的集群了,就会在路径下做一些交互;kafka服务端会帮我们做配置。

企业内部用一般不加用户名和密码,否则他们的性能会降低20-30这么多。

集群概念理解:我们创建两个分区的时候可以给每个分区创建3个副本,主副本Leader(1个),从副本:Folwer(2个)。Leader副本有写功能,从副本没有。我们把三个副本分别放在不同的三台机器上。分区发送消息是发送到主副本上。

在这里插入图片描述
Partition为分区
Leader为主副本
Replicas:为一共有多少个副本
Isr:为已同步的副本有哪些
如果我们两个分区0,1的6个节点分别部署在3台机器上。A,B,C机器;
0分区的leader副本放在A机器上,B,C放从副本。1分区的leader主副本放在B机器上,AC放从副本,此时我们B机器挂了。我们A机器上的分区还存活着,依然可以处理主题发送过来的消息。此时1分区也会选举出新的leader副本。
在这里插入图片描述

isr:已同步副本变了,变成了0,2也就是B机器挂掉了;

转载地址:http://zpqrn.baihongyu.com/

你可能感兴趣的文章
OpenTelemetry - 云原生下可观测性的新标准
查看>>
使用 ML.NET 实现峰值检测来排查异常
查看>>
通过 .NET NativeAOT 实现用户体验升级
查看>>
如何友好的处理 WebApi 中抛出的错误
查看>>
因MemoryCache闹了个笑话
查看>>
Dotnet的垃圾回收
查看>>
乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时
查看>>
gRPC在C#中的未来属于grpc-dotnet
查看>>
快速排序的性能和名字一样优秀
查看>>
开源推荐:Asp.Net Core入门学习手册!
查看>>
ML.NET 示例:对象检测
查看>>
C#基于yolov3的行人检测
查看>>
ML.NET Cookbook:(16)什么是规范化?为什么我需要关心?
查看>>
WPF 修改(优化)Menu菜单的样式
查看>>
晕了!这个配置值从哪来的?
查看>>
我开发了一款基于web容器的前端项目容器
查看>>
WPF实现环(圆)形菜单
查看>>
WPF 写一个提醒工具软件(完整项目)
查看>>
NET问答: 多个 await 和 Task.WaitAll 是等价的吗?
查看>>
MIPS衰落 LoongArch崛起
查看>>