本文共 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:2181broker.id=2
listeners=PLATNTEXT://192.168.65.60.9094 log.dir=/usr/local/data/kafka-logs-2 zookeeper.connect=192.168.65.60:2181broker.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/