谈谈数据的真正走向。
在source里面去调用channel processor进程去处理这个事件。
第三步,将数据传给了拦截器
可以配置多个拦截器,形成一个拦截器链。
多个拦截器和一个拦截器的区别:
一个拦截器固然效率高,但是生产环境中采用多个,因为更加灵活,扩展性更好。拦截器和业务相关性越高,就用一个拦截器,因为它提供复用的可能性就很低。经过拦截器链之后,又会把数据返回给channel processor.
然后数据从channel processor中传给channel selector选择器,
经过拦截器链之后,数据处理完之后,经过事务,需要将数据传给channel了,但是source可以绑定多个channel,那么,数据需要传给哪个channel呢?这时候就需要channel选择器。
之前的所有案例都是source和channel都是一一对应的,所以这个没体会。
当一个source对应多个channel的时候,就一定要配置一个channel选择器。而且还要配置选择策略。
两大策略:
副本channel选择器:会给数据给到所有的channel都
多路复用channel 选择器:需要筛选了,配置的东西比副本多。
绑定了五个channle,不一定全部给。看自己的配置。配置很灵活。后面有专门的案例。
事件给到channel选择器之后,相当于给事件打上了一个标记,将来事件到哪,就根据标记来,
接下来又把数据给到了channel了,就真的将数据写到channel了
这时候数据就到了channel了。
所以,在数据到达channel之前,有拦截器和选择器interceptor和selector
这就是source ----> channel数据的流向:
这个过程,put事务在哪呢?
接下来就是channel — sink打交道:
一个channel可以绑定多个sink
如果channel1绑定了 sink1 2 3,
问:当前的数据是给sink1还是2,,还是3呢???
这里就出现了sink 组了
默认sink组:只接收一个sink
LoadBalancingsink:负载均衡,防止某个压力过大
FailoverSink:故障转移:有一个是active,其他的做好准备,如果那个挂掉了,就赶紧顶上去。做替换
channel选择器的种类:
一、复制选择器
二、多路复用选择器、
header=state
mapping.CZ=c1
mapping.US=c2 c3
default=c4
这些都是啥意思??
之前的好多source的header都是空的
header=state
多路复用需要和拦截器一块使用,之前用的好多source的header没有东西,但是现在需要给事件加一个头,添加state。
header的数据结构是map KV形式
它的K=state,value=???
整个事件有haeder,有body,body里面就是数据。
所以vlaue应该是 CZ或者US
如果你的value=CZ,就将数据传到c1
如果你的value=US,就将数据传到c2 c3
没匹配上,或者没有添加整个头,就使用default,将数据传输到c4
因为要添加头信息,所以,多路复用选择器,需要配合拦截器使用。
三、sink组:
1、默认
如果当前channel和sink是一一对应关系的时候,不用写,是默认的
2、故障转移:
3、负载均衡:
backoff:是退避算法。
默认是关闭的,但是我们需要开启的。等待时间呈指数增长,最大值是30s等待时间呈指数增长,防止最后等待时间会变得很长,所以设置一个30s,这样以后就是每隔30s向他发送一次数据,看它有没有活过来
30s过后,再发给你,如果你还收不到,再等30s,30s之后再发。