我們使用state描述了operator state,在恢復時,可以修改並行度重新分配operator state(偶**再分配方式),或者使用union的方式(聯合重新分發)恢復並行任務。
operator state還有一種廣播狀態模式(broadcast state)。
引入廣播狀態是為了支援這樣的用例,其中來自乙個流的一些資料需要被廣播到所有下游任務,其中它被本地儲存並用於處理另乙個流上的所有傳入元素。作為廣播狀態可以作為自然擬合出現的示例,可以想象包含一組規則的低吞吐量流,我們希望針對來自另乙個流的所有元素進行評估
考慮到上述型別的用例,廣播狀態與其他運營商狀態的不同之處在於:
將keyed stream
或non-keyed stream
與乙個broadcaststream
連線,非廣播流可以通過呼叫connect()
來完成,並將其broadcaststream
作為引數。這將返回乙個broadcastconnectedstream
,我們可以process()
方法來處理我們的邏輯。如果是keyed stream
連線廣播流,process()
裡面的引數需是keyedbroadcastprocessfunction
;如果是non-keyed stream
連線廣播流,process()
裡面的引數是broadcastprocessfunction
。
1、keyed stream連線廣播流示例:
public
class
keyedbroadcaststream
}@override
public
void
processbroadcastelement
(user value, context ctx, collector
out)
throws exception })
.print(""
);env.
execute
("broadcast: ");
}}
2、non-keyed stream連線廣播流
public
class
broadcaststream})
; user.
print
("user: ");
singleoutputstreamoperator
order = env
.addsource
(new
flinkkafkaconsumer010
("order"
,new
******stringschema()
, p)).
map(
newmapfunction
()})
; order.
print
("order: ");
mapstatedescriptor
descriptor =
newmapstatedescriptor
("user"
, string.
class
, user.
class);
org.apache.flink.streaming.api.datastream.broadcaststream
broadcast = user.
broadcast
(descriptor)
; broadcastconnectedstream
connect = order.
connect
(broadcast)
; connect
.process
(new
broadcastprocessfunction
()}@override
public
void
processbroadcastelement
(user value, context ctx, collector
out)
throws exception })
.print
("result: ");
env.
execute
("broadcast: ");
}}
RabbitMQ fanout廣播交換器模式
當訂單服務向交換器傳送請求的時候,需要簡訊服務和push服務進行工作,如果使用傳統的服務呼叫的話,是強耦合不利於擴充套件開發,此時可以使用rabbitmq提供的交換器中的fanout 廣播模式 進行解決,中介軟體通過廣播模式同時將請求放入訂單服務的佇列中。進行業務的處理 fanout不會進行路由鍵匹...
sd卡狀態監聽廣播
先配置清單檔案 android name 解除安裝sd卡 android name android.intent.action.media unmounted 掛載sd卡 android name android.intent.action.media mounted sd的裡面存的是一些檔案資料,...
android 使用廣播監聽網路狀態
網路狀態發生變化的時候,系統會發出 android.net.conn.connectivity change 下面是實現的 demo packagemark.zhang importandroid.content.broadcastreceiver importandroid.content.con...