• 【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)


    问题描述

    事件中心提供 Kafka 终结点,现有的基于 Kafka 的应用程序可将该终结点用作运行你自己的 Kafka 群集的替代方案。 事件中心可与许多现有 Kafka 应用程序配合使用。在Azure官方提供的Demo中,都是针对Global Azure。以下内容通过实验来一步一步调试并在Azure中国区连接Event Hub成功。

    操作步骤

    • 准备好Event Hub的连接字符串,可以是Namespace级别的SAS connection string,也可以是Event Hub Instance(Topic)级的连接字符串
      • Event Hub Namespace 级别的连接字符串格式为:Endpoint=sb://mynamespace.servicebus.chinacloudapi.cn/;SharedAccessKeyName=XXXXXX;SharedAccessKey=XXXXXX
      • Event Hub Instance 级别的连接字符串格式为:Endpoint=sb://mynamespace.servicebus.chinacloudapi.cn/;SharedAccessKeyName=XXXXXX;SharedAccessKey=XXXXXX;EntityPath=XXXXXX
      • 注:如果您使用的是Global Azure,Event Hub的域名地址为 *.servicebus.windows.net.

    在Demo代码中,有两部分代码发送消息的Producer和消费消息的Consumer. 他们的文件结构如下:

    • Producer:使用Demo中的Producer项目代码,发送消息到事件中心,如果需要修改kafka的版本,可以在pom.xml文件中修改kafka依赖的版本信息。
    • Consumer:使用Demo中的Consumer项目代码,从开启Kafka终结点的事件中心接受消息。如果需要修改kafka的版本,可以在pom.xml文件中修改kafka依赖的版本信息。

    第一步:修改发送端的Kafka连接字符串和TOPIC名称

    在producer.config文件中修改bootstrap.servers 和 sasl.jaas.config 的值。使用事件中心的kafka终结点(Event Hubs Kafka endpoint)。

    bootstrap.servers=youreventhubnamespacename.servicebus.chinacloudapi.cn:9093
    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://youreventhubnamespacename.servicebus.chinacloudapi.cn/;SharedAccessKeyName=manage;SharedAccessKey=xxxxxx;EntityPath=testmessage";

    同时也在TestProducer.java文件中修改TOPIC值。如这次测试中使用的是testmessage

    第二步:修改消费端的Kafka连接字符串和TOPIC名称

    在consumer.config文件中修改bootstrap.servers 和 sasl.jaas.config 的值。使用事件中心的kafka终结点(Event Hubs Kafka endpoint)。

    bootstrap.servers=youreventhubnamespacename.servicebus.chinacloudapi.cn:9093
    group.id=$Default
    request.timeout.ms=60000
    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://youreventhubnamespacename.servicebus.chinacloudapi.cn/;SharedAccessKeyName=manage;SharedAccessKey=xxxxxx;EntityPath=testmessage";

    同时也在TestConsumer.java文件中修改TOPIC值。如这次测试中使用的是testmessage

    第三步:调试发送端和消费端代码

    在VS Code中直接调试代码,点击F5启动或者在Mian方法之上点击run or debug linkbutton。测试效果如:

    错误一:Invalid SASL mechanism response, server may be expecting a different protocol   /   Error reading field 'sasl_auth_bytes': Bytes size -1 cannot be negative

    在开始Debug Producer代码时,出现了无效的SASL响应,Event Hub服务端不支持当前使用的kafka协议错误 (Invalid SASL mechanism response, server may be expecting a different protocol)。原来是由于使用的Event Hub定价层为基本层,而Azure支持Apache Kafka协议是在标准版和专用版。所以回到Azure Event Hub的定价层页面,升级到标准版后就可以成功连接到事件中心(Event Hub)。

    This error occurs when publishing to a basic plan Event Hub, as the basic plan does not support interaction via Kafka protocol.An upgrade to a standard plan should resolve this. https://azure.microsoft.com/en-au/pricing/details/event-hubs/

    参考资料

    Send and Receive Messages in Java using Azure Event Hubs for Apache Kafka Ecosystems: https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/quickstart/java

    针对 Azure 事件中心的 Apache Kafka 开发人员指南: https://docs.azure.cn/zh-cn/event-hubs/apache-kafka-developer-guide

    Not able connect to EventHub via KAFKA api: https://stackoverflow.com/questions/59891094/not-able-connect-to-eventhub-via-kafka-api

    当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

  • 相关阅读:
    form表单提交中文乱码(前台中文到JAVA后台乱码)问题及解决
    JSON工具类库: alibaba/fastjson 使用记录
    前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "
    AJAX与后台交互传参的两种方式
    小米平板充不上电解决(非硬件问题+系统升级原因)
    对于异常的理解
    solr如何进行搜索实战,关键字全库搜索
    solr5.5.4 添加mysql数据,实现同步更新
    solr5.5.4 tomcat8部署
    log4j通过配置文件配置即,即可完成系统报错想向指定邮箱发送提醒消息,网上的很多方法都又问题
  • 原文地址:https://www.cnblogs.com/lulight/p/14375190.html
Copyright © 2020-2023  润新知