一、基本术语 1.Brokerkafka与传统的中间件区别:
1.消息消费完不会删除,默认保存在磁盘一周。(kafka每个消费者会维护自己的一个消息列表偏移量)
消息中间件处理节点,一个kafka节点就是一个Broker,一个或多个Broker可以组成一个kafka集群。 一个Broker包含多个topic。2.Topic
Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic。3.Product
消息生产者,向Broker发送消息的客户端。4.Consumer
消息消费者,从Broker读取消息的客户端。5.ConsumerGroup
每个consumer属于一个特定的ConsumerGroup,一条消息可以被不同的ConsumerGroup消费,但是 一个ConsumerGroup只能有一个Consumer能够消费该消息。6.Partition
物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的。二、安装&环境配置
kafka是依赖zookeeper和jvm的。 所以需要自行安装jdk和zookeeper 安装完成后。1.下载安装包
wget https://mirror.bit.edu.cn/apache/kafka/2.4.1/kafka_2.11-2.4.1.tgz # 2.11是scala的版本,2.4.1是kafka的版本 tar -vxzf kafka_2.11-2.4.1.tgz cd kafka_2.11-2.4.12.修改配置
修改配置文件config/server.propertities
#broker.id 属性在集群中必须唯一 broker.id=0 #kafka部署的机器IP和对外服务的端口号 listeners=PLAINTEXT://102.23.35.36:9092 #kafka的消息存储文件 log.dir=/usr/local/data/kafka-logs #kafka连接zookeeper的地址 zookeeper.connect=102.23.35.36:21803.启动kafka
# 启动kafka,运行日志在logs目录的server.log文件里 bin/kafka-server-start.sh -deamon config/server.properties #可以通过客户端查看目录树 bin/zkCli.sh ls / #查看zk根目录kafka相关节点 ls /brokers/ids #查看kafka节点 # 停止kafka bin/kafka-server-stop.sh4.创建主题topic
# 创建一个名为test的topic,备份因子为1,只有一个partition(Product发送一个消息到topic,topic不存在也会自己自动创建一个) bin/kafka-topics.sh --create --zookeeper 102.23.35.36:2180 --replication-factor 1 --partitions 1 --topic test # 查看kafka目前存在的topic bin/kafka-topics.sh --list --zookeeper 102.23.35.36:2180 #删除kafka主题 bin/kafka-topics.sh --delete --topic test --zookeeper 102.23.35.36:21805.发送消息
kafka自带了一个producer命令客户端,可以从本地文件中读取内容,或者可以用命令行的方式直接输入内容,并将这些内容以消息的形式发送到kafka集群中。每一行会被独立成一个消息发送。
bin/kafka-console-producer.sh --broker-list 102.23.35.36:9092 --topic test >this a msg6.消费消息
对于consumer来说,也有一个命令客户端,会将消费到的消息打印到命令行,默认是消费的最新消息。
bin/kafka-console-consumer.sh --bootstrap-server 102.23.35.36:9092 --topic test
如果想要消费之前的消息可以通过-from-beginning参数指定:
bin/kafka-console-consumer.sh --bootstrap-server 102.23.35.36:9092 --from-beginning --topic test消费多主题
bin/kafka-console-consumer.sh --bootstrap-server 102.23.35.36:9092 --whitelist "test|test1"单播消息
一条消息只能被某一个消费者消费的模式。只需要让所有消费者在同一个消费组即可。分别在俩个客户端执行如下 消费命令,然后往主题里面发送消息,结果只有一个客户端可以收到消息。
bin/kafka-console-consumer.sh --bootstrap-server 102.23.35.36:9092 --consumer-property group.id=testGroup --topic test多播消费
一条消息可以被多个消费者消费的模式。类似publish-subscribw模式消费,针对kafka消息只能被 同一个消费组下的某一个消费者消费的特性,要实现多播只要保证这些消费者在不同的消费组就可以了。再增加一个 testGroup-1消费者。结果俩个客户端都可以消费到消息。
bin/kafka-console-consumer.sh --bootstrap-server 102.23.35.36:9092 --consumer-property group.id=testGroup-1 --topic test三、集群配置 1.kafka集群概念、
每个topic可以分配多个partition分区。为了让一个topic存储海量的数据,每个分区将会存储来不同的机器上 因此准确的说是partition的集群。2.配置
config/server-1.properties
#broker.id 属性在集群中必须唯一 broker.id=1 #kafka部署的机器IP和对外服务的端口号 listeners=PLAINTEXT://102.23.35.36:9093 #kafka的消息存储文件 log.dir=/usr/local/data/kafka-logs #kafka连接zookeeper的地址 zookeeper.connect=102.23.35.36:2180
config/server-2.properties
#broker.id 属性在集群中必须唯一 broker.id=2 #kafka部署的机器IP和对外服务的端口号 listeners=PLAINTEXT://102.23.35.36:9094 #kafka的消息存储文件 log.dir=/usr/local/data/kafka-logs #kafka连接zookeeper的地址 zookeeper.connect=102.23.35.36:2180
已经有一个zookeeper实例和一个broker实例在运行了,现在再启动2个broker实例
bin/kafka-server-start.sh -deamon config/server-1.properties bin/kafka-server-start.sh -deamon config/server-2.properties
再次创建topic的时候指定副本个数和分区个数,就会发现分区会存储在不同的broker机器上。多个副本之间,当前只有一个副本可以读写,当前的这个副本称之为主分区(主节点)。
只能一个分区在一个消费者组里面被某一个消费者消费。
消息发送要指定toptic和分区。
如果不指定分区,会按照key,有一个算法往指定的分区里面发。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)