Kafka
消息中间件
区别于rabbitmq,kafka更适用于量级较大的数据(100w级),主要在大数据领域使用
Kafka介绍
一个分布式流媒体平台,类似于消息队列或企业消息传递系统
Kafak的结构如下
producer:发布消息的对象
topic:Kafak将消息分门别类,每类的消息称为一个主题(Topic)
consumer:订阅主题并处理发布的消息的对象称为主题消费者
broker:已发布的消息保存在一组服务器中,称为kafka集群,集群中的每一个服务器都是一个代理(broker)
消费者可以订阅一个或者多个的主题,并从broker中拉取数据,从而消费这些已发布的消息.
Kafka对zookeeper强依赖,需要使用zk进行分区的负载均衡以及节点的注册
docker安装zk和kafka
docker pull zookeeper:3.4.14
docker run -d --name zookeeper --restart=always -p 2181:2181 zookeeper:3.4.14
docker pull wurstmeister/kafka:2.12-2.3.1
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.200.130 \
--env KAFKA_ZOOKEEPER_CONNECT=192.168.200.130:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.130:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--restart=always \
--net=host wurstmeister/kafka:2.12-2.3.1
Kafka入门
kafka的生产者消费者模型分为单播和多播
单播:同组内存在多个消费者,一个主题只能发送消息到同一个组内的一个消费者
多播:不同组的多个消费者,一个主题可以发送消息到不同组的多个不同消费者
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
Kafka的高可用设计(集群模式)
多个broker组成一个cluster集群
集群中的某一条机器宕机,其他机器上的broker依然能对外提供服务
Kafka的备份机制(republication)
消息的备份称为副本(replica)
分为两种副本
领导者副本(leader replica)
追随者副本(follower replica) 分为ISR 和 普通
同步方式:
领导者副本直接接收发布者的消息
随后领导者副本会同步将消息复制保存到ISR follower副本,异步将消息复制保存到普通follower副本
如果leader失效,需要选举出新的leader
依据以下原则选举:
选举优先从ISR中选举,因为ISR副本是同步的
如果ISR中没有生效的副本,就从普通中选举一个
如果所有副本都失效
可以等待ISR副本活过来保证数据完整性,也可以选举第一个活过来的保证数据可用性
Kafka的生产者详解
消息发送:
分为同步发送和异步发送
同步发送:
ProducerRecord<String,String> record = new ProducerRecord<String, String>("itheima-topic","100001","hello kafka");
RecordMetadata recordMetadata = producer.send(ProducerRecord).get()