大家好,我是一哥,上周末邀请明哥一起给大家分享了Kafka的相关知识点,内容主要分为以下6部分:
- 微服务,事件驱动的架构与kafka
- kafka 常见的应用场景
- kafka 的架构原理和相关术语
- kafka 的常见管理命令和运维工
- kafka 的高级特性和发展趋势
- kafka 的生态系统
01
事件驱动的架构与kafka
传统微服务的痛点:
- 横向扩展难 Scaling is hard
- 状态难管理 Handling state is hard
- 微服务之间难以协同 Sharing, coordinating is hard
- 每个微服务对应一个数据库比较难落实 Run a database in each micro service - is hard
事件驱动架构的优点:
EDA 事件驱动架构的核心思想是pub-sub模式,微服务1 处理完逻辑后产生消息/事件,微服务2 订阅消息/事件并进行处理,微服务之间不需要知道彼此的存在,EDA 事件驱动架构具有分布式MQ所带来的所有优点:
- 如微服务之间异步解耦,不存在直接调用,互不影响;
- 微服务内部可以灵活扩展以做到削峰填谷;
- 各个微服务易修改和滚动上线;
- 新增和删除微服务不影响已有微服务;
- 整个系统的部署成本低等;
02
Kafka常见的应用场景
- 实时欺诈检测
- 物联网IOT
- 在线流媒体实时分析
- 数据集成
03
Kafka的架构原理和相关术语
Topic:topic is a message stream (queue), to which messages are published;
Partitions :Topic is divided into partitions,which are ordered immutable sequence of messages that is continually appended to;
Messages: Topic partitions contain messages;
Offset: Each messages in the partitions are assigned a unique (per partition) and sequential id called the offset
04
Kafka的管理命令和运维工具
Kafka常用命令:
代码语言:javascript复制Kafka-topics.sh –list –zookeeper node1:2181
Kafka-topics.sh –create –zookeeper node1:2181 –topic my-topic –replication-factor 2 –partitions 5
Kakfa-topics.sh –describe –zookeeper node1:2181 –topc my-topic
kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type topics
kafka-topics.sh --zookeeper uf30tdh1:2181 --alter --topic xxx --config xx=yy
kafka-topics.sh --zookeeper uf30tdh1:2181 --alter --topic xxx --delete-config xx
Kafka-console-producer.sh –broker-list node1:9092 –topic my-topic
Kafka-console-consumer.sh –bootstrap-server node1:9092 –topic my-topic –from-beginning
/kafka-consumer-groups.sh --bootstrap-server broker1:9092 --list
Kafka常用管理工具:
Kafka Manager:该监控工具更偏向于对kafka集群的管理,也有监控;https://github.com/yahoo/kafka-manager/releases
Kafka-eagle: https://github.com/smartloli/kafka-eagle
《Kafka实战宝典:监控利器kafka-eagle》
《干货,实战滴滴开源Logi-KafkaManager》
05
Kafka的高级特性和发展趋势
kafka的事务机制,概括起来就是说,开启生产者事务后,消息是正常写到目标topic的,但会通过transaction coordinator 使用两阶段提交协议写标记到目标topic(具体的标记有对应 commit的也有对应rollback的);
没有开启事务的消费者,正常读取目标topic; 开启了事务的消费者,如果配置为 read-committed, 会根据目标topic中的marker过滤掉rollback的和尚未提交transaction的message,从而确保只读到已提交的事务的message;
日志文件中除了普通的消息,还有一种消息专门用来标志一个事务的结束,它就是控制消息 controlBatch,它有两种类型:commit和abort,分别用来表征事务已经成功提交或已经被成功终止。
RecordBatch中 attributes 字段的第6位用来标识当前消息是否是控制消息,1代表是控制消息,0则反之。
RecordBatch中attributes字段的第5位用来标志当前消息是否处于事务中,1代表消息处于事务中,0则反之。
由于控制消息也处于事务中,所以attributes字段的第5位和第6位都被置为1.
06
Kafka的生态系统