快乐如铃 發表於 2025-5-30 09:05:00

wso2~自定义kafka-event-publisher

<h1 id="自定义eventpublishers的步骤">自定义event/publishers的步骤</h1>
<h2 id="介绍">介绍</h2>
<ul>
<li>event/publishers功能位于carbon平台的event菜单,选择publishers菜单项即可打开发布者配置列表,你可以添加自定义的发布者,它们接收apim的相关事件</li>
<li>核心组件: org.wso2.carbon.event.output.adaptor.kafka</li>
<li>功能: 将APIM的事件数据发送到Kafka中</li>
<li>选择的通知输入流: org.wso2.apimgt.notification.stream</li>
<li>输出的事件适配类型: kafka</li>
<li>消息格式: json</li>
<li>参考:https://apim.docs.wso2.com/en/4.3.0/use-cases/streaming-tutorials/working-with-kafka</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/118538/202505/118538-20250530090443522-568649023.png" alt="" loading="lazy"></p>
<h2 id="组件的依赖包">组件的依赖包</h2>
<blockquote>
<p>在carbon中的event/publishers中,添加一个kafka的发布者,然后配置相关kafka配置即可,它依赖下面一些jar包,需要将它们添加到/lib目录</p>
</blockquote>
<ul>
<li>jopt-simple-3.2.jar</li>
<li>kafka_2.10-0.8.1.jar</li>
<li>kafka-clients-0.8.2.1.jar</li>
<li>log4j-1.2.17.jar</li>
<li>metrics-annotation-2.2.0.jar</li>
<li>metrics-core-2.2.0.jar</li>
<li>org.osgi.core-6.0.0.jar</li>
<li>osgi.cmpn-6.0.0.jar</li>
<li>pax-logging-api-1.11.10.jar</li>
<li>scala-library-2.10.5.jar</li>
<li>snappy-java-1.1.2.1.jar</li>
<li>zkclient-0.11.jar</li>
<li>zookeeper-3.3.4.jar</li>
</ul>
<h2 id="helm对kafka-event-stream的支持">helm对kafka-event-stream的支持</h2>
<blockquote>
<p>carbon/event下面的publishers以xml文件的形式被存储到文件目录/home/wso2carbon/wso2am-4.5.0/repository/deployment/server/eventpublishers下面,当你自己在carbon平台添加自定义的publisher后,由于这个目录没有挂载到磁盘,所以重启apim之后,自定义的publisher就丢失了;知道为什么会丢失,我们就可以对helm-charts进行优化了。</p>
</blockquote>
<p><strong>流程图</strong></p>
<p><img src="https://img2024.cnblogs.com/blog/118538/202506/118538-20250611094212477-832868689.png" alt="" loading="lazy"></p>
<ol>
<li>添加toml原内容文件(all-in-one/confs/kafka_notice.toml)</li>
</ol>
<pre><code class="language-xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;eventPublisher name="kafka_notice" processing="enable"
                statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher"&gt;
    &lt;from streamName="org.wso2.apimgt.notification.stream" version="1.0.0"/&gt;
    &lt;mapping customMapping="disable" type="json"/&gt;
    &lt;to eventAdapterType="kafka"&gt;
      &lt;property name="topic"&gt;{{ .Values.kafka.topic }}&lt;/property&gt;
      &lt;property name="meta.broker.list"&gt;{{ .Values.kafka.host }}&lt;/property&gt;
    &lt;/to&gt;
&lt;/eventPublisher&gt;
</code></pre>
<ol start="2">
<li>添加configmap(all-in-one/templates/am/wso2am-kafka-conf.yaml)</li>
</ol>
<pre><code>{{- if .Values.kafka.enabled}}
apiVersion: v1
kind: ConfigMap
metadata:
name: kafka-notice-conf
namespace : {{ .Release.Namespace }}
data:
kafka_notice.xml: {{ tpl (.Files.Get "confs/kafka_notice.toml") . | quote }}
{{- end }}
</code></pre>
<ol start="3">
<li>修改deployment(all-in-one/templates/am/wso2am-deployment.yaml)</li>
</ol>
<pre><code class="language-yaml">{{- if .Values.kafka.enabled}}
      volumeMounts:
      - name: kafka-notice-conf
          mountPath: /home/wso2carbon/wso2am-4.5.0/repository/deployment/server/eventpublishers/kafka_notice.xml
          subPath: kafka_notice.xml
{{- end }}
    volumes:
      - name: kafka-notice-conf
      configMap:
          name: kafka-notice-conf
</code></pre>
<ol start="4">
<li>在values.yaml中添加kafka相关配置</li>
</ol>
<pre><code class="language-yaml">kafka:
enabled: true
topic: apim-topic
host: 192.168.1.17:9092
</code></pre>
<p>经过上面的调整,你的helm-chart已经支持了kafka的event/publisher的配置了,下次重启apim,你的kafka-event/publisher就不会丢失了</p>


</div>
<div id="MySignature" role="contentinfo">
    <p></p>
<div class="navgood">
<p>作者:仓储大叔,张占岭,<br>
荣誉:微软MVP<br>QQ:853066980</p>

<p><strong>支付宝扫一扫,为大叔打赏!</strong>
<br><img src="https://images.cnblogs.com/cnblogs_com/lori/237884/o_IMG_7144.JPG"></p>
</div><br><br>
来源:https://www.cnblogs.com/lori/p/18903538
頁: [1]
查看完整版本: wso2~自定义kafka-event-publisher