class KafkaQueue
{
/**
* 生产消息,如果失败打印日志,无返回值
*
* @param string $topicName topic名称
* @param string $key 消息key,会根据key进行hash存储到对应的partition
* @param string $message 发送的消息,string或json
*
* @return void|bool
*/
public function producer($topicName, $key, $message)
{
$kafkaParams = array(
'message.timeout.ms' => 2000,
'message.send.max.retries' => 1,
'request.required.acks' => -1,
);
$conf = new \RdKafka\Conf();
foreach ($kafkaParams as $k => $v) {
$conf->set($k, $v);
}
// 设置回调函数,失败后打印日志
$conf->setDrMsgCb(function ($kafka, $message) {
if ( $message->err ) {
// 记录错误日志
logger_error('[ERROR] [KafkaQueue] [producer] kafak producer error:', [
'topic_name' => $message->topic_name,
'key' => $message->key,
'payload' => $message->payload,
]);
return false;
}
});
$rk = new \RdKafka\Producer($conf);
$rk->addBrokers(env('KAFKA_BOOTSTRAP_SERVERS'));
$topic<
【PHPSDK】Kafka是分布式、高吞吐、可扩展的消息队列服务
最新推荐文章于 2024-08-12 08:45:39 发布
本文详细介绍了如何使用PHP SDK来集成和利用Kafka作为分布式消息队列服务,重点讨论了其高吞吐量和可扩展性的特点,以及在实际项目中的应用和优化技巧。
摘要由CSDN通过智能技术生成