You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony项目安装simple_kafka_client后遇Configuration类加载错误

解决SimpleKafkaClient\Configuration类找不到的问题

出现这个错误的核心原因是未正确安装依赖包/扩展,或者类的命名空间、类名使用错误,以下是具体解决步骤:

1. 确认依赖安装

首先检查是否通过Composer安装了正确的SimpleKafkaClient包:

composer require php-kafka/php-simple-kafka-client

如果已添加依赖,执行composer install确保包完整安装。

2. 检查类命名空间/类名

你可能混淆了原生rdkafka扩展与SimpleKafkaClient包装类:

  • 若使用原生rdkafka扩展,类名应为RdKafka\Conf而非SimpleKafkaClient\Configuration,对应的Producer类也是RdKafka\Producer。
  • 若使用php-kafka/php-simple-kafka-client包,SimpleKafkaClient\Configuration命名空间是正确的,但需确保包安装无误。

3. 修正代码示例

情况1:使用php-kafka/php-simple-kafka-client包

确保依赖安装后,原代码基本可用(需确认rdkafka扩展已安装):

use PyaeSoneAung\AwsMskIamSaslSigner\AwsMskIamSaslSigner;
use SimpleKafkaClient\Configuration;
use SimpleKafkaClient\Producer;

$conf = new Configuration();
$conf->set('metadata.broker.list', 'kafka:9092');
$conf->set('security.protocol', 'SASL_SSL');
$conf->set('sasl.mechanisms', 'OAUTHBEARER');

$producer = new Producer($conf);

$awsMskIamSaslSigner = new AwsMskIamSaslSigner(
    'us-east-1',
    'testAccessKeyId',
    'testSecretAccessKey'
);
$token = $awsMskIamSaslSigner->generateToken();
$producer->setOAuthBearerToken($token['token'], $token['expiryTime'], 'principalClaimName=azp');

$topic = $producer->getTopicHandle('topic-name');

$topic->producev(
    RD_KAFKA_PARTITION_UA,
    RD_KAFKA_MSG_F_BLOCK,
    'value',
    'key',
    ['header-key' => 'header-value']
);

$producer->poll(0);

$result = $producer->flush(20000);

情况2:使用原生rdkafka扩展

修改use语句与类实例化逻辑:

use PyaeSoneAung\AwsMskIamSaslSigner\AwsMskIamSaslSigner;
use RdKafka\Conf;
use RdKafka\Producer;

$conf = new Conf();
$conf->set('metadata.broker.list', 'kafka:9092');
$conf->set('security.protocol', 'SASL_SSL');
$conf->set('sasl.mechanisms', 'OAUTHBEARER');

$producer = new Producer($conf);

$awsMskIamSaslSigner = new AwsMskIamSaslSigner(
    'us-east-1',
    'testAccessKeyId',
    'testSecretAccessKey'
);
$token = $awsMskIamSaslSigner->generateToken();
// 原生RdKafka设置OAuth Token的方式略有差异
$producer->setOAuthBearerToken($token['token']);

$topic = $producer->newTopic('topic-name');

$topic->producev(
    RD_KAFKA_PARTITION_UA,
    RD_KAFKA_MSG_F_BLOCK,
    'value',
    'key',
    ['header-key' => 'header-value']
);

$producer->poll(0);

$result = $producer->flush(20000);

4. 检查rdkafka扩展是否安装

无论使用哪种包,都需要先安装rdkafka扩展:

  • 通过pecl安装:
    pecl install rdkafka
    
  • 安装后在php.ini中添加extension=rdkafka.so,重启PHP服务。

内容的提问来源于stack exchange,提问作者bhaskar p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 18:45:03