1. 程式人生 > >Kafka producer程式本地執行時傳送資訊失敗解決方案

Kafka producer程式本地執行時傳送資訊失敗解決方案

今天執行kafka本地producer程式時,總是傳送資訊失敗,經過查閱資料,最終發現是kafka叢集的配置問題。

kafka 叢集broker : broker1:9092,broker2:9092

配置解析:

config/server.properties檔案中有幾個引數:

# Hostname the broker will bind to. If not set, the server will bind to all interfaces
#host.name=localhost

# Hostname the broker will advertise to producers and consumers. If not set, it uses the
# value for "host.name" if configured.  Otherwise, it will use the value returned from
# java.net.InetAddress.getCanonicalHostName().
advertised.host.name=10.12.50.12

其中host.name預設為null。如果hostname已經設定的話,broker將只會繫結到這個地址上;如果沒有設定,它將繫結到所有介面,併發布一份到ZK

advertised.host.name預設為null。如果沒有設定的話,並且如果host.name如果配置的了話,會使用hots.name的值,否則會使用 java.net.InetAddress.getCanonicalHostName()介面返回的值。這個hostname會通知給producers和consumers。

預設配置時,host.name和advertised.host.name都是null。非本機執行kafka producer時傳送資訊失敗的原因就在這兩個配置上。首先本地producer會和kafka叢集通訊,kafka叢集會將叢集元資料傳送給producer,然後由producer連線broker傳送資訊。由於host.name和advertised.host.name都沒有配置,所以通知給producer的advertised.host.name

如說明中所示的,就是 java.net.InetAddress.getCanonicalHostName()返回的值。在kafka叢集節點上, java.net.InetAddress.getCanonicalHostName()獲得的值是當前節點的hostname或者IP,如果返回的是IP,那麼是沒有問題的。不幸的是,返回的是hostname。當返回kafka節點的hostname給producer時,producer程式會連線這個hostname。如果本地沒有配置這個hostname對應的ip,那麼自然是連線不到的。所以會資訊傳送失敗。

解決辦法:1.本地配置kafka叢集中節點的hostname對應的ip   => 不推薦。沒有驗證是否可行,原理上應該是沒問題的。配置麻煩,而且工作節點可能會多種多樣。

2.kafka叢集配置時配置host.name或advertised.host.name為本機ip => 推薦,簡單易實施。已驗證可行。

相關推薦

Kafka producer程式本地執行傳送資訊失敗解決方案

今天執行kafka本地producer程式時,總是傳送資訊失敗,經過查閱資料,最終發現是kafka叢集的配置問題。 kafka 叢集broker : broker1:9092,broker2:9092 配置解析: config/server.properties檔案中有幾個

C# 應用程式執行異常資訊捕獲

示例: static class Program { /// <summary> /// 應用程式的主入口點。 /// </summary> [STAThread] static void Main()

nginx環境設定(openresty 安裝openssl查詢失敗解決方案

安裝 在Centos下,yum源不提供nginx的安裝,可以通過切換yum源的方法獲取安裝。也可以通過直接下載安裝包的方法,**以下命令均需root許可權執行**: 首先安裝必要的庫(nginx 中gzip模組需要 zlib 庫,rewrite模組

獲取java程式執行記憶體資訊

由於最近想自己動手測試一下String和StringBuffer的效率問題,需要獲取程式執行時的記憶體佔中資訊,於是上網查了一下,根據查到的資料寫了個程式,發現結果有問題,才發現查到的資料是錯誤的.所以在這裡跟大家分享一下獲取記憶體佔用的正確方法

Agent agentmain+ASM記錄方法執行引數資訊

agentmain提供了執行時修改指定程序中位元組碼的能力,配合ASM框架,達到隨時修改位元組碼的效果。 agentmain方法: public static void agentmain(String agentArgs, Instrumentation inst){

執行型別資訊(RTTI)之遞迴列印類資訊

深度優先 public class ClassPrint { private static void printSupers(Class<?> clazz) { String name = clazz.getCanonicalName(); System.out.p

執行型別資訊(RTTI + 反射)

執行時型別資訊使得你可以在程式執行時發現和使用型別資訊。 Java是如何讓我們在執行時識別物件和類的資訊的,主要有3種方式 “傳統的”RTTI,它假定我們在編譯時已經知道了所有的型別,比如Shape s = (Shape)s1; “反射”機制,它執行我們在執行時

VS中Debug版程式執行正常但Release版執行控制元件有異常(控制元件在執行消失)的解決方法

#問題 首先用VS生成應用程式是正常的,然後點選最小化按鈕隱藏到下方工作列,然後再點選工作列這個圖示將應用程式還原出來,結果還原出來後應用程式下方的控制元件都無法顯示出來,這是release版本的,de

執行型別資訊

RTTI(在執行時,識別一個物件的型別)可以在程式執行時發現和使用型別資訊,這就打破了只能在編譯期執行面向型別的操作的限制。使用它,可以查詢某個Shape引用所指向的物件的確切型別,然後選擇或者剔除特例。在面向物件程式設計中,一般讓程式碼只操縱對基類的引用。在Java中,所

[面試] C/C++ 語法(六)—— RTTI(執行型別資訊

RTTI(RunTime Type Information),顧名思義,物件執行時型別資訊,以便在執行時進行型別識別。 C++ 的物件識別可通過以下三個技術得以實現: (1)dynamic_cast 運算子(型別安全的向下轉型) 向下轉型是不安全的,多型

第三回 執行資訊(Runtime Class Information)

為清晰起見,省略了行末的\ ) #define DECLARE_CLASS(clss) public:                                     //類資訊,派生自基類CClass     class CClass_##clss:public CClass      

微信小程式藍芽連線傳送資訊

///獲取應用例項 var app = getApp() Page({ data: { lanya: "", state: "", msg: "", sousuo: "", status: "", connectedDeviceId: "",//連線裝置Id

Tensorflow原始碼解析6 -- TensorFlow本地執行

Tensorflow原始碼解讀系列文章,歡迎閱讀 帶你深入AI(1) - 深度學習模型訓練痛點及解決方法 自然語言處理1 – 分詞 Tensorflow原始碼解析1 – 核心架構和原始碼結構 Tensorflow原始碼解析2 – 前後端連線的橋樑 - Session Tensorflow

應用程式中嵌入的網頁執行出現“指令碼錯誤”解決方法

 CComPtr<IWebBrowser2> pWB2;  HRESULT hr;  hr = m_wndIE.QueryControl(&pWB2);  if (pWB2)  {   CComVariant v;   CComBSTR url(

vs2010生成的exe程式執行,提示計算機丟失mfc100d.dll檔案

vs2010開發的exe程式在別的電腦執行時提示,這個問題是因為執行程式的電腦在system32這個資料夾下沒有mfc100ud.dll這個檔案,解決辦法如下: 1、下載一個mfc100ud.dll,然後隨同你的.exe程式一起釋出; 2、需要mfc100ud.dll,說明

linux程式跑掛堆疊資訊日誌列印

程式碼如下:void gdb_signal_handler(int signo) { char buff[64] = {0}; sprintf(buff,"cat /proc/%d/maps", getpid()); system((const char*) buff)

ios程式後臺執行,當有訊息推送過來,如何修改程式角標上是數字

這個得在發訊息的伺服器中給你累加,客戶端只是被動的顯示applicationIconBadgeNumber值。當客戶端收到推送訊息時要告訴伺服器端,伺服器將applicationIconBadgeNumber置為0,當在後臺或未開啟時,不能告訴伺服器端,伺服器每發一條,就會

laravel執行composer update出現如下錯誤資訊解決方案

本人使用的是laravel5.0,在執行composer update時出現:Call to undefined method Illuminate\Foundation\Application::getCachedCompilePath()的錯誤提示。 解決

laravel5.5自帶使用者認證重置密碼傳送郵件失敗的問題

問題 laravel5.5使用開箱即用的使用者認證時,重置密碼需要傳送郵件,結果報錯,錯誤已經修復,而且當時沒有截圖,所以就不展示啦,反正原因就是因為沒有進行郵件相關的配置,laravel預設是使用SMTP進行郵件傳送,而我使用的是163郵箱,所以接下來就是要在我的163郵箱中開啟SMTP伺服器

SpringBoot執行dataSource建立失敗解決辦法

先貼錯誤資訊: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class p