向Kafka主题发送消息时不要分段位导致超时

我有一个Java应用程序,它将消息异步发送到远程Apache Kafka主题。 它失败,但以下情况除外:

java.lang.RuntimeException: org.apache.http.client.Clientprotocolexception
at com.$MyCompany.datalake.streams.clients.producer.internals.Sender.run(Sender.java:315)
at com.$MyCompany.datalake.streams.clients.producer.internals.Sender.run(Sender.java:163)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.Futuretask.run(Futuretask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.http.client.Clientprotocolexception: null
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140)
at com.$MyCompany.datalake.streams.clients.producer.internals.Sender.run(Sender.java:310)
... 6 common frames omitted
Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:108)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
... 11 common frames omitted
Caused by: java.net.SocketException: Connection timed out (Write failed)
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at sun.security.ssl.OutputRecord.writeBuffer(OutputRecord.java:431)
at sun.security.ssl.OutputRecord.write(OutputRecord.java:417)
at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:879)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:124)
at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:136)
at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:167)
at org.apache.http.impl.io.ChunkedOutputStream.flushCache(ChunkedOutputStream.java:109)
at org.apache.http.impl.io.ChunkedOutputStream.write(ChunkedOutputStream.java:156)
at java.io.DataOutputStream.write(DataOutputStream.java:88)
at com.$MyCompany.datalake.streams.clients.producer.internals.Sender$2.writeTo(Sender.java:271)
at org.apache.http.impl.execchain.RequestEntityProxy.writeTo(RequestEntityProxy.java:121)
at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:156)
at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:160)
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)

经过大量调查和tcpdumps等之后,我们发现源计算机正在将DF(Dont Fragment)位设置为软件包。在目标的某个位置, 一台比我们的MTU小的机器,因此数据包被拒绝。对齐后,我们的MTU大小问题就解决了。

以下是我不清楚的地方:

据我了解,目标计算机应发送回ICMP消息,指出“数据包太大”。为什么我的应用程序(使用Kafka-REST发送消息)无法处理?

是因为它是异步消息吗?那我的捕获异常的回调呢?

jjjjcccchhhh 回答:向Kafka主题发送消息时不要分段位导致超时

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3136954.html

大家都在问