kafka的优点
1 通过O(1)的磁盘数据结构提供消息的持久化,
这种结构对于即使数以TB的消息存储也能够
保持长时间的稳定性能。
2 高吞吐量[2]:即使是非常普通的硬件Kafka
也可以支持每秒数百万[2]的消息。
3 支持通过Kafka服务器和消费机集群来分区消息。
4 支持Hadoop并行数据加载。[3]
kafka的关键字
Broker
Kafka集群包含一个或多个服务器,这种服务器被称为broker
Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
(
物理上不同Topic的消息分开存储,
逻辑上一个Topic的消息虽然保存于一个或多个broker上
但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
Partition
Partition是物理上的概念,每个Topic包含一个或多个Partition.
Producer
负责发布消息到Kafka broker
Consumer
消息消费者,向Kafka broker读取消息的客户端。
Consumer Group
每个Consumer属于一个特定的Consumer Group
(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
kafka的基本的使用
使用最新版的php
kafka的使用
https://arnaud-lb.github.io/php-rdkafka/phpdoc/index.html
安装kafka扩展
mac下安装
1 安装 brew install kafka
kafka配置
/usr/local/etc/kafka/server.properties
/usr/local/etc/kafka/zookeeper.properties
启动zookeeper
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties &
启动kafka
kafka-server-start /usr/local/etc/kafka/server.properties &
创建一个topic
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
列出topic
kafka-topics --list --zookeeper localhost:2181
发送消息
kafka-console-producer --broker-list localhost:9092 --topic test
消费消息
kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
php可用的扩展
https://packagist.org/packages/nmred/kafka-php
https://arnaud-lb.github.io/php-rdkafka/phpdoc/book.rdkafka.html
产生消息
// 安装php kafka扩展
//创建一个
$rk = new RdKafka\Producer();
$rk->setLogLevel(LOG_DEBUG);
$rk->addBrokers("localhost:9092");
// new topic
$topic = $rk->newTopic("test");
$topic->produce(RD_KAFKA_PARTITION_UA, 0, "Message payload");
消费消息
$rk = new RdKafka\Consumer();
$rk->setLogLevel(LOG_DEBUG);
// 指定 broker 地址,多个地址用"," 分割
$rk->addBrokers("localhost:9092");
$topic = $rk->newTopic("test");
$topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING);
//消费
while (true) {
// 第一个参数是分区号
// 第二个参数是超时时间
$msg = $topic->consume(0, 1000);
if ($msg->err) {
echo $msg->errstr(), "\n";
break;
} else {
echo $msg->payload, "\n";
}
}