KAFKA

KAFKA

kafka 入门

什么是kafaka 应该如何理解?

分布式,分区的,多副本的,消息队列功能

吞吐量高,伸缩性,容错性好(持久化/好几份),一主多备高可用

有流处理的功能

概念

什么是(topic /ˈtɑːpɪk/)主题?

什么是(partition /pɑːrˈtɪʃn/)分区?

什么是(offset /ˈɔːfset/)偏移量?

什么是(record /rekɔːd/)消息格式?

什么是(broker /ˈbroʊkər/)消息代理?

什么是主(leader)分区-主?

什么是从(followr)分区-从?

什么是(consumer group /kənˈsuːmər ɡruːp/)消费者组?

什么是(producer group /prəˈduːsər ɡruːp/)生产者?

什么是(kafka Cluster /ˈklʌstər/)kafka集群?

什么是副本因子?

什么是 acks = -1/0/1区别?

AMQP
AMQP 模型(协议)

队列(queues)

信箱(exchanges)

绑定(bindings)

特点: 支持事务,多用于金融,银行.

典型: RabbitMq

MQTT 模型(协议)
Topic 主题

半结构化的数据

主题包含多个分区

Partion 分区

消息存储到Partin后,不可变,

不同的分区,存于不同的服务器上.(扩展性)

会选举Leader(一个)

其他的为follower(多个)

调整分区数量

可根据偏移量,查询消息,但是不可变更

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Racord 消息记录

消息Racord 为 k-v

若 kafka通过副本机制,保证数据的副本

replication-factor=3 设置副本因子的数量(包含主分区)

所有数据的写入,都是写入到leader中,

所有数据的读取,也是从leader中.

follower只负责从leader中获取同步.

若follower未同步,ISR会剔除,

直到follower同步同步完毕后,ISR添加

Broker 消息代理

负责将消息写入到磁盘中

Kafka Cluster 集群

broker 代理

partitions 分区

蓝色为Leader

橘红为Follower

这个集群有8个Broker,集群中主题(topic)有8个分区(partition)P0-P7,副本因子3

kafka 本地vm安装集群

建议安装vm

建议直接docker集群

kafka 理论知识

消费模型

分区是最小的并行单位

一个消费者可以消费多个分区

注意:一个分区不能同时被同一个组的多个消费(P0不能被C1,C2同时消费)

(出于性能和开销,还有锁的考虑)

可以把消费者发一个组里,这样还可以负载均衡,还不会多次消费

点对点
发布订阅
分区和消息顺序

设置一个分区,这样就可以保证所有的消息的顺序,但是失去了拓展性和性能

支持通过设置消息的key,相同key的消息会发送的同一个分区.

消息传递语义

acks同步机制

acks=0

不会等待;

生产者在成功写入消息之前不会等待任何来自服务器的响应

acks=1

已经被kafka-leader接受到(不一定是写入成功/不一定同步到followr);

表示只要集群的leader分区副本接收到了消息,就会向生产者发送一个成功响应的ack

aks=-1/all

所有副本都接受到了信息

表示只有所有参与复制的节点(ISR列表的副本)全部收到消息时,生产者才会接收到来自服务器的响应. 这种模式是最高级别的,也是最安全的,可以确保不止一个Broker接收到了消息. 该模式的延迟会很高

最少一次

acks=-1或all

retries>0

消息不会丢失,但可能会重复

生产者:

消费者:

最多一次

acks=0或acks=1

消息可能会丢失,永远不会重复发送

生产者:

消费者:

先提交消费位置

后读取信息

精准一次

保证消息被传递到服务端且在服务端不重复

需要生产者,消费者共同来保障.

yaml 复制代码
## 启用幂等参数
enable.idempotence=true
retries=Integer.MAX_VALUE
acks=all

通过offset来防止,不好

通常是加入唯一ID,流水ID,来实现精确一次

异步发送

同步太慢,效率太低,使用异步发送

KafkaProducer (kafka 3.2.3 API) (apache.org)

java 复制代码
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import java.util.Properties;

public class Test {
    public static void main(String[] args) {

        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("linger.ms", 1);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer<>(props);
        for (int i = 0; i < 100; i++)
            producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i)));

        producer.close();
    }
}

自动提交--至多一次

kafka支持批量发送

事务消息

事务

tex 复制代码
Isolation Level 隔离级别
默认: read_uncommitted 脏读
read_committed  读取成功提交的数据, 不会脏读

序列化/反序列化

序列化
自定义序列化
常用消息格式

CSV: 逗号分割(数据简单)

JSON: 可读性高,占用空间大; (Elastic Search支持)

序列号消息--Avro(Hadoop,Hive支持)

序列化消息--Protobuf

保证先后顺序

Confluent Schema Registry

汇流架构注册表

/kɑnˈfluənt/ /ˈskiːmə/ /ˈredʒɪstri/

1.数据解析强依赖 schema registry

2.破坏数据本身

Record Header

kafka 面试点

相关推荐
zquwei4 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
道一云黑板报8 小时前
Flink集群批作业实践:七析BI批作业执行
大数据·分布式·数据分析·flink·kubernetes
qq_5470261798 小时前
Kafka 常见问题
kafka
core5128 小时前
flink sink kafka
flink·kafka·sink
飞来又飞去9 小时前
kafka sasl和acl之间的关系
分布式·kafka
MZWeiei10 小时前
Zookeeper的监听机制
分布式·zookeeper
莹雨潇潇11 小时前
Hadoop完全分布式环境部署
大数据·hadoop·分布式
浩哲Zhe11 小时前
RabbitMQ
java·分布式·rabbitmq
明达技术12 小时前
分布式 IO 模块:赋能造纸业,革新高速纸机主传动
分布式
Allen Bright12 小时前
RabbitMQ中的Topic模式
分布式·rabbitmq