Flume高可用負載均衡問題
首先寫一個普通的Java類
這個類主要就是向hostName iP的port節點傳送資訊
package flumeTest;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.flume.Event;
import org.apache.flume.api.RpcClient;
import org.apache.flume.api.RpcClientFactory;
import org.apache.flume.event.EventBuilder;
//連結avro的flume source 傳送event 到flume agent
public class FlumeClient {
private RpcClient flumeClient;
private String hostName;
private int port;
public FlumeClient(String hostname,int port){
this.hostName =hostname;
this.port=port;
this.flumeClient=RpcClientFactory.getDefaultInstance(hostname, port);
}
//把字串訊息傳送event到avro source
public void sendEvent(String msg){
Map<String, String> headers =new HashMap<String, String>();
headers.put("timestamp", String.valueOf(new Date().getTime()));
//構建event
Event event =EventBuilder.withBody(msg, Charset.forName("UTF-8"), headers);
try{
flumeClient.append(event);
}catch (Exception e) {
e.printStackTrace();
flumeClient.close();
flumeClient=null;
flumeClient=RpcClientFactory.getDefaultInstance(hostName, port);
}
}
public void close(){
flumeClient.close();
}
//這個類的作用就是向hostName的port埠輸入Flume定義的RpcClient avro格式的內容
public static void main(String[] args) {
FlumeClient flumeClient =new FlumeClient("master", 5555);
String bMsg="fromjava-msg";
for(int i=0;i<100;i++){
flumeClient.sendEvent(bMsg+i);
}
flumeClient.close();
}
}
conf檔案
不在展示 很簡單 source為avro sink為logger channel為memory
高可用的方式
package flumeTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Properties;
import org.apache.flume.Event;
import org.apache.flume.api.RpcClient;
import org.apache.flume.api.RpcClientFactory;
import org.apache.flume.event.EventBuilder;
//這個類主要是保證了Flume的高可用 通過properties檔案定義Client型別是default_failover
//
public class FailoverClient {
private Properties properties;
private RpcClient failoverClient;
//初始化rpcclient
public FailoverClient() throws IOException{
this.properties=new Properties();
InputStream inputStream = new FileInputStream("E:\new workspace\flumeTest\src\main\resources\failover_client.conf");
properties.load(inputStream);
this.failoverClient=RpcClientFactory.getInstance(properties);
}
//傳送訊息
public void sendEvent(String msg){
Event event =EventBuilder.withBody(msg,Charset.forName("UTF-8"));
try {
failoverClient.append(event);
} catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
failoverClient.close();
}
public static void main(String[] args) throws IOException, InterruptedException{
FailoverClient failoverClient =new FailoverClient();
String msg ="message_";
for(int i=1;i<100;i++){
failoverClient.sendEvent(msg+i);
Thread.sleep(1000);
}
failoverClient.close();
}
}
properties檔案
client.type=default_failover
hosts=h1 h2
hosts.h1=master:8888
hosts.h2=slave1:8888
max-attempts=3
負載均衡的Java類和高可用的類幾乎沒有什麼改變 變得只是properties檔案
package flumeTest;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Properties;
import org.apache.flume.Event;
import org.apache.flume.api.RpcClient;
import org.apache.flume.api.RpcClientFactory;
import org.apache.flume.event.EventBuilder;
public class LoadBalanceClient {
private RpcClient lbClient;
private Properties properties;
public LoadBalanceClient() throws FileNotFoundException, IOException{
this.properties =new Properties();
properties.load(new FileInputStream("src/main/resources/load_balance.conf"));
this.lbClient =RpcClientFactory.getInstance(properties);
}
public void sentEvent(String msg){
Event event =EventBuilder.withBody(msg, Charset.forName("UTF-8"));
try {
lbClient.append(event);
} catch (Exception e) {
e.printStackTrace();
}
}
public void close(){
lbClient.close();
}
public static void main(String[] args) throws FileNotFoundException, IOException {
LoadBalanceClient loadBalanceClient =new LoadBalanceClient();
String msg ="msg_";
for (int i = 0; i < 100; i++) {
loadBalanceClient.sentEvent(msg+i);
}
loadBalanceClient.close();
}
}
properties
client.type=default_loadbalance
hosts=h1 h2
hosts.h1=master:8888
hosts.h2=slave1:8888
host-selector-random
相關文章
- Nginx負載均衡高可用Nginx負載
- Flume負載均衡配置負載
- keepalived高可用負載均衡負載
- Keepalived實現Nginx負載均衡高可用Nginx負載
- Mycat 雙主雙從-負載均衡-高可用負載
- 高可用+高併發+負載均衡架構設計負載架構
- Haproxy+Keepalived高可用負載均衡叢集負載
- haporxy+keepalived實現負載均衡+高可用負載
- Keepalived+HAproxy實現高可用負載均衡負載
- keepalived+haproxy實現mysql負載均衡高可用MySql負載
- 一個負載均衡的問題負載
- LVS+Keepalived 實現高可用負載均衡負載
- 3.RabbitMQ高階叢集搭建(Haproxy負載均衡、Keepalived高可用)MQ負載
- RabbitMQ(四):使用Docker構建RabbitMQ高可用負載均衡叢集MQDocker負載
- 搭建Keepalived + Nginx + Tomcat的高可用負載均衡架構NginxTomcat負載架構
- CentOS7+ keepalived+ haproxy搭建Mycat高可用及負載均衡CentOS負載
- Keepalived+Nginx+Tomcat配置高可用負載均衡系統示例NginxTomcat負載
- LVS+Keepalive 實現負載均衡高可用叢集負載
- 【MySQL】keepalived+haproxy實現mysql的高可用與負載均衡MySql負載
- LVS+Keepalived高可用負載均衡叢集架構負載架構
- NoSQL中負載均衡系統如何解決熱點問題,提高可用性?SQL負載
- CentOS7 實現 Keepalived + Nginx 實現高可用 Web 負載均衡CentOSNginxWeb負載
- 【Nginx】如何實現Nginx的高可用負載均衡?看完我也會了!!Nginx負載
- LVS+keepalived DR模式配置高可用負載均衡叢集模式負載
- mairadb+galera+haproxy+keepalived實現mysql負載均衡與高可用AIMySql負載
- Linux下"負載均衡+高可用"叢集的考慮點 以及 高可用方案說明(Keepalive/Heartbeat)Linux負載
- 使用tengine解決負載均衡的session問題負載Session
- 關於 apache + tomcat 的負載均衡問題ApacheTomcat負載
- apache2.2+tomcat6負載均衡問題ApacheTomcat負載
- Nginx實現請求的負載均衡 + keepalived實現Nginx的高可用Nginx負載
- windows NLB+ARR實現Web負載均衡高可用/可伸縮的方法WindowsWeb負載
- 基於MySQL Cluster + LVS + KeepAlived部署負載均衡高可用架構MySql負載架構
- 方案聚焦:高可用的F5分散式雲DNS負載均衡分散式DNS負載
- 【轉貼】lvs負載均衡+keepalived高可用性配置詳解負載
- 負載均衡負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- gRPC負載均衡(自定義負載均衡策略)RPC負載
- lvs 負載均衡遇到的一個問題. (問題解決)負載