1.调研项目
腾讯云 CKafka
消息队列 pulsar (腾讯TDMQ)
2.Kafka 介绍
模式:发布/订阅

broker: kafka 服务器集群
topic: 消息的主题,对消息进行分类。一般一个 topic 对应一个业务线。
partition: topic 的分区,分区的作用是做负载,提高 kafka 的吞吐量。同一个 topic 在不同分区的数据是不同的,partition 的表现形式就是一个个文件夹。
replication: 每一个 partition 都有多个副本。分区中有一个 Leader,如果挂了会选举出一个 Follower 来做 Leader。
kafka 默认最大为 10 个副本。partition 的数量不能超过 broker。 leader 和 follower 需要存放在不同的机器上。
comsumer group: 多个消费者组成一个消费组,一个 partiton 的数据只能被消费组中的某一个消费者消费。消费组可以消费一个 topic 不同 partition 的数据,这样有利于提高 kafka 的吞吐量。
概念
- kafka 通过 Topic 对存储数据进行分流
- 每条记录中包含一个 key、一个 value、一个 timestamp
- API
- Producer API 生产者
- Comsumer API 消费者
- Streams API 流处理,消费多个 Topic 的输入流,然后产生一个输出流到一个或多个 Topic 中去(流转换)
- Connector API 连接数据库,捕捉表的变化
基本命令
查看 Topic kafka-topics.sh --list --zookeeper localhost:2181
如何保证消息有序?只要开多线程/多进程消费都有问题
php 操作 kafka
请阅读参考资料
检查是否有安装 gcc g++ 等编译工具
php-kafka 文档 => 另一个 php 开发的客户端
命令行消费kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic='kafka-php-test'
不同的消费 group 可以同时消费消息,这个有点像广播。
组内的消息每个 partition 的数据只能被一个消费者消费


3.配置参数详解
earliest 当分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费。
latest 当分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据。
none 当该topic下所有分区中存在未提交的offset时,抛出异常。
