Kafka是什么
Kafka是一个开源的时间流处理平台,由Scala和Java编写,持久化本质是分布式事务日志架构的大规模发布订阅消息队列
为什么要用Kafka
优点:
- 解耦
- 异步
- 流量削峰填谷
缺点:
- 可用性降低
- 复杂性提高
- 一致性问题
Kafka能做什么
- 消息系统:用户下单后将订单信息发送到Kafka主题中,各处理订单的微服务可以从Kafka中消费订单消息,进行库存检查、支付处理、订单确认等操作
- 预警通知:当库存到达某个阈值时向Kafka发生预警信息,其他采购系统或管理人员系统订阅预警信息
- 物流跟踪:将物流运输状态更新发送到Kafka,其他系统订阅状态获取物流信息
- 日志收集
- 流式处理
Kafka不能做什么
- 限时订单
Kafka架构
- Producer:消息生产者,向Kafka主题(Topic)发送消息(Message)的客户端应用程序或进程
- Consumer:消息消费者,从kafka主题(Topic)读取消息的客户端应用程序或进程
- ConsumerGroup:消费者组,由一个或多个消费者组成,共同消费一个或多个主题的消息,默认从最新偏移量开始消费,将
auto.offset.reset
设置为earliest
从头开始消费 - Broker:代理,Kafka集群中的一个服务器节点
- Topic:主题,一类消息的逻辑分类
- Partition:分区,为实现可扩展性和高吞吐量,一个主题可以被分成多个分区
- Message:消息,生产者发送到Kafka主题和消费者从主题读取的数据单元
- Partition:分区,一个Topic默认一个分区
- Offset:偏移量,每个分区写入事件的序号,从0开始
Topic 主题
主题用于存储事件
- 事件也称为消息、记录,如支付记录、地理位置、运输订单、遥测数据、日志
AMQP
Docker部署Kafka
以前需要用到zookeeper,现在可以直接用Kraft
一、命令部署Kafka
由于docker部署一般在开发环境,监听了所有端口
ADVERTISED_LISTENERS必须设置外部连接Kafka broker的地址,本机开发设置为localhost
,服务器开发设置为宿主机ip地址
- CONTROLLER:管理和协调集群的各种元数据操作以及分区(Partition)的分配等重要任务
-
不同的协议监听的端口必须不同
-
LISTENER_SECURITY_PROTOCOL_MAP必须指定协议映射
- PLAINTEXT:明文协议,使用未加密的TCP进行通信
- INTERNAL:内部网络,可以使用服务发现机制
- EXTERNAL:外部网络,指定可以从外部监听的地址
docker run -it -d \
-p 9092:9092 \
--name broker \
--network pub-network \
--restart always \
-e KAFKA_NODE_ID=1 \
-e KAFKA_PROCESS_ROLES=broker,controller \
-e KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092