
# Producer发送数据失败，报错"NullPointerException"
#### 问题现象
使用MRS安装集群，主要安装ZooKeeper、Kafka。
在使用Producer向Kafka发送数据功能时，发现客户端报错NullPointerException。
#### 可能原因
1. Kafka服务异常。
2. 客户端Producer侧jaas文件和keytab文件错误。
 
#### 原因分析
Producer发送数据到Kafka失败，可能原因为客户端Producer侧问题或者Kafka侧问题。
1. 通过Manager页面查看Kafka服务状态及监控指标。
   - MRS Manager界面操作：登录MRS Manager，依次选择"服务管理 \> Kafka"，查看当前Kafka状态，发现状态为良好，且监控指标内容显示正确。
   
   - FusionInsight Manager界面操作：登录FusionInsight Manager，选择"集群 \> 服务 \> Kafka"，查看当前Kafka状态，发现状态为良好，且监控指标内容显示正确。
    
2. 查看Producer客户端日志，发现打印NullPointerException异常信息，如[图1]所示。
   图1Producer客户端日志   
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0264281774.jpg "点击放大")
   或者日志中只有异常信息没有堆栈信息（只有NullPointerException无堆栈信息，出现这个问题是jdk的自我保护，相同堆栈打印太多，就会触发这个保护开关，后续不再打印堆栈），如[图2]所示。
   图2异常信息   
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0264281510.jpg "点击放大") 

3. 查看Producer客户端日志，发现打印Failed to configure SaslClientAuthenticator异常信息，如[图3]所示。
   图3异常日志信息   
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0264281758.jpg "点击放大") 

4. 认证失败导致创建KafkaChannel失败，导致通过channel(key)方法获取的KafkaChannel为空，以至于疯狂打印NullPointerException，上述日志可以发现，认证失败的原因是用户密码不正确，密码不正确的原因可能是用户名不匹配导致。
5. 检查Jaas文件和Keytab文件，发现Jaas文件中配置使用的principal为stream。
   图4检查Jaas文件   
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0264281575.jpg "点击放大")
   查看user.keytab文件，发现principal为zmk_kafka。
   图5查看user.keytab文件   
   ![](https://support.huaweicloud.com/trouble-mrs/zh-cn_image_0264281870.jpg "点击放大")
   发现jaas文件和user.keytab文件中principal不对应。
   该情况是由于应用程序自动定时更新Jaas文件，但是有两个不同的进程在进行更新，一个进程写入正确的Principal而另一个却写入了错误的Principal，以至于程序时而正常，时而异常。
   
 
#### 解决办法
1. 修改Jaas文件，确保使用的Principal在Keytab文件中存在。
 
