kafka外网访问疑云
前言
最近在搭建数据实时捕获和传输管道(CDC)时用到了kafka,首先在阿里云ECS上搭建了一个最简单的kafka实例,因为是阿里云内网ECS,经测试无误后通过公网映射出来到公司网络环境提供服务,主要后面需要将DTS中的数据塞到kafka提供到本地调试。但是因为对kafka不了解,在本地连接kafka时遇到了各种网络问题。
问题集
如果Topic不存在时,通过kafka-client发送消息,会抛如下异常:
java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
at org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.(KafkaProducer.java:1186) at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:880) at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:803) at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:690) at com.keking.midplatform.jobs.demo.KafkaProducerDemo.main(KafkaProducerDemo.java:39)
Caused by: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
这个时候检查Topic已经存在了,而且异常是超时异常,所以再次运行,然后抛如下异常了:
java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for fullfillment-2: 30032 ms has passed since batch creation plus linger time
error occurred
at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.valueOrError(FutureRecordMetadata.java:94) at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:64) at org.apache.kafka.clients.producer.internals.FutureRecordMetadata.get(FutureRecordMetadata.java:29) at com.keking.midplatform.jobs.demo.KafkaProducerDemo.main(KafkaProducerDemo.java:41)
Caused by: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for fullfillment-2: 30032 ms has passed since batch creation plus linger time
解决问题
在kafka的配置中有如下配置
advertised.listeners:=PLAINTEXT://xxxx:9092,默认是不开启的,官方说明如下
Listeners to publish to ZooKeeper for clients to use, if different than the `listeners` config property. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, the value for `listeners` will be used. Unlike `listeners` it is not valid to advertise the 0.0.0.0 meta-address.
译文:监听器发布到ZooKeeper以供客户端使用,如果不同于`listeners`配置属性。 在IaaS环境中,这可能需要与代理绑定的接口不同。 如果未设置,则将使用“listeners”的值。 与`listeners`不同,宣传0.0.0.0元地址是无效的。
大概意思就是如果提供服务给外网访问,需要配置代理的ip和端口。而我们正是这个场景,最后通过配置advertised.listeners成网关的ip+映射的端口,解决了问题
配置说明详情参考:http://kafka.apache.org/20/documentation.html#brokerconfigs
结语
这个场景很常见,遇到的人应该会很多,给他人一个参考吧
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Jenkins Pipeline集成Sonar进行代码质量检测
Jenkins Pipeline集成Sonar进行代码质量检测 简介 jenkins pipeline Jenkins Pipeline (或简称为 "Pipeline" )是一套jenkins插件,将持续交付的实现和实施集成到 Jenkins 中。 Jenkins Pipeline 表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。 Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。 Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被检入到项目的源代码控制库中。 摘自Jenkins官方文档 SonarQube SonarQube is an open source platform to perform automatic reviews with static analysis of code to detect bugs, code smells and security vulnerabilities on 25+ prog...
- 下一篇
东南亚的招聘骗局,程序员请注意!
阅读本文大概需要 5.2 分钟。 总有些我认为是常识的事情,在别人看来都是第一次接触。很多骗局都是如此,圈内人不上当,圈外人不警惕。毕竟骗子吃的就是信息不对称的生意。关于东南亚的招聘骗局,便是如此。 他们当前主力针对的是程序员一族,被骗者甚众,很多人一去不回。今天我把这点东西写出来,希望更多人能看到,能警醒。 东南亚,当今华人冒险者的天堂。这里离中国很近,所以交通方便,市场相通,物流便利。这里的文化习惯与国内接近,并且有大量华人,所以融入当地环境,难度很低。而且当地立法宽松,执法更宽松,只要一些进贡,绿灯开起来就没灭过。 在这里,博-彩和色-情产业是合法的,当地政府只管税收和贿赂,不管闲事。最妙的是,这里离大陆虽然近但又不是十分近,所以大陆警方想跨国抓人困难重重。市场广阔,文化融合简单,监管宽松,作恶成本低,种种条件带来的后果,就是一个很理想的罪恶之地。 菲律宾,印尼,柬埔寨,老挝,马来西亚,缅甸,到处都有罪恶发生。美丽的热带风光下,是无数博-彩网站的大本营。 一套完整网络博-彩体系的运转,需要大量的程序员来维护。 不要小看博-彩,博-彩体系非常复杂,从架构稳定性到数据库设计到前端可配...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题