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 面试点

相关推荐
不太灵光的程序员15 分钟前
【HBase分布式数据库】第七章 数据的导入导出 importtsv导入数据
数据库·分布式·hbase
Acrel_WPP2 小时前
分布式光伏智慧平台建设现场 系统集成商如何盈利
分布式
大山同学2 小时前
DPGO:异步和并行分布式位姿图优化 2020 RA-L best paper
人工智能·分布式·语言模型·去中心化·slam·感知定位
Lyqfor3 小时前
云原生学习
java·分布式·学习·阿里云·云原生
流雨声3 小时前
2024-09-01 - 分布式集群网关 - LoadBalancer - 阿里篇 - 流雨声
分布式
floret*4 小时前
用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错
分布式·kafka·etl
william8234 小时前
Information Server 中共享开源服务中 kafka 的__consumer_offsets目录过大清理
分布式·kafka·开源
P.H. Infinity5 小时前
【RabbitMQ】10-抽取MQ工具
数据库·分布式·rabbitmq
lzhlizihang6 小时前
Kafka一些常用的命令行操作【包含主题命令、生产者和消费者命令】
kafka
Hsu_kk7 小时前
Kafka 安装教程
大数据·分布式·kafka