Hi,all!
由于第一次咨询,我不确定上一份邮件大家是否收到。 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide 份? | | 张浩 | | [hidden email] | 签名由网易邮箱大师定制 |
Hi
现在的实现是这样的,每条数据会在每个窗口中存一份 Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > Hi,all! > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > 份? > > > | | > 张浩 > | > | > [hidden email] > | > 签名由网易邮箱大师定制 |
Hi
我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state 什么时候清理逻辑也会变得麻烦一些) Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: > 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 > 不知道,我这样理解的对吗? > 另外,为什么我们不能只存储一份数据呢? > 非常感谢与您交流! > > > > 张浩 > 邮箱:[hidden email] > > <https://maas.mail.163.com/dashi-web-extend/html/proSignature.html?ftlId=1&name=%E5%BC%A0%E6%B5%A9&uid=13669299054%40163.com&iconUrl=https%3A%2F%2Fmail-online.nosdn.127.net%2Fqiyelogo%2FdefaultAvatar.png&items=%5B%22%E9%82%AE%E7%AE%B1%EF%BC%9Azhanghao_waxm%40163.com%22%5D> > > 签名由 网易邮箱大师 <https://mail.163.com/dashi/dlpro.html?from=mail88> 定制 > > 在2020年07月06日 13:46,Congxian Qiu <[hidden email]> 写道: > Hi > 现在的实现是这样的,每条数据会在每个窗口中存一份 > > Best, > Congxian > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > > > Hi,all! > > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > > 份? > > > > > > | | > > 张浩 > > | > > | > > [hidden email] > > | > > 签名由网易邮箱大师定制 > > |
Hi
每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State 中都会有一份。 PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 Best, Congxian 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: > > Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? > 很高兴与您探讨! > > > > 张浩 > 邮箱:[hidden email] > > <https://maas.mail.163.com/dashi-web-extend/html/proSignature.html?ftlId=1&name=%E5%BC%A0%E6%B5%A9&uid=13669299054%40163.com&iconUrl=https%3A%2F%2Fmail-online.nosdn.127.net%2Fqiyelogo%2FdefaultAvatar.png&items=%5B%22%E9%82%AE%E7%AE%B1%EF%BC%9Azhanghao_waxm%40163.com%22%5D> > > 签名由 网易邮箱大师 <https://mail.163.com/dashi/dlpro.html?from=mail88> 定制 > > 在2020年07月06日 20:56,Congxian Qiu <[hidden email]> 写道: > Hi > > 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state > 什么时候清理逻辑也会变得麻烦一些) > > Best, > Congxian > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: > >> 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 >> 不知道,我这样理解的对吗? >> 另外,为什么我们不能只存储一份数据呢? >> 非常感谢与您交流! >> >> >> >> 张浩 >> 邮箱:[hidden email] >> >> <https://maas.mail.163.com/dashi-web-extend/html/proSignature.html?ftlId=1&name=%E5%BC%A0%E6%B5%A9&uid=13669299054%40163.com&iconUrl=https%3A%2F%2Fmail-online.nosdn.127.net%2Fqiyelogo%2FdefaultAvatar.png&items=%5B%22%E9%82%AE%E7%AE%B1%EF%BC%9Azhanghao_waxm%40163.com%22%5D> >> >> 签名由 网易邮箱大师 <https://mail.163.com/dashi/dlpro.html?from=mail88> 定制 >> >> 在2020年07月06日 13:46,Congxian Qiu <[hidden email]> 写道: >> Hi >> 现在的实现是这样的,每条数据会在每个窗口中存一份 >> >> Best, >> Congxian >> >> >> 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: >> >> > Hi,all! >> > 由于第一次咨询,我不确定上一份邮件大家是否收到。 >> > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide >> > 份? >> > >> > >> > | | >> > 张浩 >> > | >> > | >> > [hidden email] >> > | >> > 签名由网易邮箱大师定制 >> >> |
嗯嗯,之前没有选择回复全部,不好意思。
我看源码关于RocksDB这块确实是需要序列化的,所以肯定是多份保存,如果状态后端是heap呢,也是一样的吗?从我测试内存来看,感觉也是多份,只是heapliststate那个类给了我一些困惑😦 在2020年07月11日 16:23,Congxian Qiu 写道: Hi 每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State 中都会有一份。 PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 Best, Congxian 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? 很高兴与您探讨! | | 张浩 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2020年07月06日 20:56,Congxian Qiu 写道: Hi 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state 什么时候清理逻辑也会变得麻烦一些) Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 不知道,我这样理解的对吗? 另外,为什么我们不能只存储一份数据呢? 非常感谢与您交流! | | 张浩 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2020年07月06日 13:46,Congxian Qiu 写道: Hi 现在的实现是这样的,每条数据会在每个窗口中存一份 Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > Hi,all! > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > 份? > > > | | > 张浩 > | > | > [hidden email] > | > 签名由网易邮箱大师定制 |
Hi
你说的 HeapListState 的困惑具体是什么呢? Best, Congxian Jimmy Zhang <[hidden email]> 于2020年7月11日周六 下午4:50写道: > 嗯嗯,之前没有选择回复全部,不好意思。 > > 我看源码关于RocksDB这块确实是需要序列化的,所以肯定是多份保存,如果状态后端是heap呢,也是一样的吗?从我测试内存来看,感觉也是多份,只是heapliststate那个类给了我一些困惑😦 > > > 在2020年07月11日 16:23,Congxian Qiu 写道: > Hi > > > 每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend > 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State > 中都会有一份。 > > > PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: > > > Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? > 很高兴与您探讨! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 20:56,Congxian Qiu 写道: > Hi > > > 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state > 什么时候清理逻辑也会变得麻烦一些) > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: > > 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 > 不知道,我这样理解的对吗? > 另外,为什么我们不能只存储一份数据呢? > 非常感谢与您交流! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 13:46,Congxian Qiu 写道: > Hi > 现在的实现是这样的,每条数据会在每个窗口中存一份 > > Best, > Congxian > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > > > Hi,all! > > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > > 份? > > > > > > | | > > 张浩 > > | > > | > > [hidden email] > > | > > 签名由网易邮箱大师定制 > |
Hi,all!
从WindowOperator.java的processElement方法跟进去,使用windowState.add(element.getValue());添加数据,这里面找到add方法的HeapListState类的实现, @Override public void add(V value) { Preconditions.checkNotNull(value, "You cannot add null to a ListState."); final N namespace = currentNamespace; final StateTable<K, N, List<V>> map = stateTable; List<V> list = map.get(namespace); if (list == null) { list = new ArrayList<>(); map.put(namespace, list); } list.add(value); } 就是这个方法,让我产生了 “此value只真实存在一份”的困惑! | Best, Jimmy | 签名由网易邮箱大师定制 在2020年7月11日 21:02,Congxian Qiu<[hidden email]> 写道: Hi 你说的 HeapListState 的困惑具体是什么呢? Best, Congxian Jimmy Zhang <[hidden email]> 于2020年7月11日周六 下午4:50写道: 嗯嗯,之前没有选择回复全部,不好意思。 我看源码关于RocksDB这块确实是需要序列化的,所以肯定是多份保存,如果状态后端是heap呢,也是一样的吗?从我测试内存来看,感觉也是多份,只是heapliststate那个类给了我一些困惑😦 在2020年07月11日 16:23,Congxian Qiu 写道: Hi 每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State 中都会有一份。 PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 Best, Congxian 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? 很高兴与您探讨! | | 张浩 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2020年07月06日 20:56,Congxian Qiu 写道: Hi 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state 什么时候清理逻辑也会变得麻烦一些) Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 不知道,我这样理解的对吗? 另外,为什么我们不能只存储一份数据呢? 非常感谢与您交流! | | 张浩 | | 邮箱:[hidden email] | 签名由 网易邮箱大师 定制 在2020年07月06日 13:46,Congxian Qiu 写道: Hi 现在的实现是这样的,每条数据会在每个窗口中存一份 Best, Congxian 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: Hi,all! 由于第一次咨询,我不确定上一份邮件大家是否收到。 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide 份? | | 张浩 | | [hidden email] | 签名由网易邮箱大师定制 |
Hi
从 HeapListState#add 这里看是的,我跟了一个 WindowOperator 到最终 HeapListState 的逻辑,这里确实是只有一份数据,没有拷贝。这个东西的实现可能是因为性能好,我尝试确认下这个原因,多谢你的提问。 Best, Congxian Jimmy Zhang <[hidden email]> 于2020年7月12日周日 上午8:13写道: > Hi,all! > > 从WindowOperator.java的processElement方法跟进去,使用windowState.add(element.getValue());添加数据,这里面找到add方法的HeapListState类的实现, > > > @Override > public void add(V value) { > Preconditions.checkNotNull(value, "You cannot add null to a ListState."); > final N namespace = currentNamespace; > final StateTable<K, N, List<V>> map = stateTable; > List<V> list = map.get(namespace); > if (list == null) { > list = new ArrayList<>(); > map.put(namespace, list); > } > list.add(value); > } > 就是这个方法,让我产生了 “此value只真实存在一份”的困惑! > | > Best, > Jimmy > | > 签名由网易邮箱大师定制 > 在2020年7月11日 21:02,Congxian Qiu<[hidden email]> 写道: > Hi > 你说的 HeapListState 的困惑具体是什么呢? > > Best, > Congxian > > > Jimmy Zhang <[hidden email]> 于2020年7月11日周六 下午4:50写道: > > 嗯嗯,之前没有选择回复全部,不好意思。 > > > 我看源码关于RocksDB这块确实是需要序列化的,所以肯定是多份保存,如果状态后端是heap呢,也是一样的吗?从我测试内存来看,感觉也是多份,只是heapliststate那个类给了我一些困惑😦 > > > 在2020年07月11日 16:23,Congxian Qiu 写道: > Hi > > > 每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend > 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State > 中都会有一份。 > > > PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: > > > > Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? > 很高兴与您探讨! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 20:56,Congxian Qiu 写道: > Hi > > > 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state > 什么时候清理逻辑也会变得麻烦一些) > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: > > 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 > 不知道,我这样理解的对吗? > 另外,为什么我们不能只存储一份数据呢? > 非常感谢与您交流! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 13:46,Congxian Qiu 写道: > Hi > 现在的实现是这样的,每条数据会在每个窗口中存一份 > > Best, > Congxian > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > > Hi,all! > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > 份? > > > | | > 张浩 > | > | > [hidden email] > | > 签名由网易邮箱大师定制 > > |
Hi!
好的,非常感谢! 很期待你接下来的回复。 | Best, Jimmy | Signature is customized by Netease Mail Master 在2020年07月13日 19:58,Congxian Qiu 写道: Hi 从 HeapListState#add 这里看是的,我跟了一个 WindowOperator 到最终 HeapListState 的逻辑,这里确实是只有一份数据,没有拷贝。这个东西的实现可能是因为性能好,我尝试确认下这个原因,多谢你的提问。 Best, Congxian Jimmy Zhang <[hidden email]> 于2020年7月12日周日 上午8:13写道: > Hi,all! > > 从WindowOperator.java的processElement方法跟进去,使用windowState.add(element.getValue());添加数据,这里面找到add方法的HeapListState类的实现, > > > @Override > public void add(V value) { > Preconditions.checkNotNull(value, "You cannot add null to a ListState."); > final N namespace = currentNamespace; > final StateTable<K, N, List<V>> map = stateTable; > List<V> list = map.get(namespace); > if (list == null) { > list = new ArrayList<>(); > map.put(namespace, list); > } > list.add(value); > } > 就是这个方法,让我产生了 “此value只真实存在一份”的困惑! > | > Best, > Jimmy > | > 签名由网易邮箱大师定制 > 在2020年7月11日 21:02,Congxian Qiu<[hidden email]> 写道: > Hi > 你说的 HeapListState 的困惑具体是什么呢? > > Best, > Congxian > > > Jimmy Zhang <[hidden email]> 于2020年7月11日周六 下午4:50写道: > > 嗯嗯,之前没有选择回复全部,不好意思。 > > > 我看源码关于RocksDB这块确实是需要序列化的,所以肯定是多份保存,如果状态后端是heap呢,也是一样的吗?从我测试内存来看,感觉也是多份,只是heapliststate那个类给了我一些困惑😦 > > > 在2020年07月11日 16:23,Congxian Qiu 写道: > Hi > > > 每个窗口都是一个单独的 state,至于你认为的不同 state 仅保持引用是不对的。这个你可以使用 RocksDBStateBackend > 来考虑,RocksDBStateBackend 中会把 state 序列化成 bytes,然后写到 RocksDB 中,就是每个 State > 中都会有一份。 > > > PS:回复邮件的时候可以选择「全部回复」这样就能够加上 "[hidden email]"),这样我们的邮件所有人都能看到了 > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月7日周二 上午10:34写道: > > > > Hi,我通过看源码发现每条数据到达时,是分配给了所有的窗口,但是我理解这单条数据是不是只是传递给了每个窗口,其实在内存中只有一份,窗口状态保持对它的引用,触发一次窗口就删掉对这些数据的引用? > 很高兴与您探讨! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 20:56,Congxian Qiu 写道: > Hi > > > 我理解,如果只存取一份的话,state 的管理会变得麻烦一些(所有需要这份数据的窗口都需要去某个地方取, state > 什么时候清理逻辑也会变得麻烦一些) > > > Best, > Congxian > > > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午1:57写道: > > 你好,我的思考是便于在状态信息中清除或者提取每一个窗口的数据信息。 > 不知道,我这样理解的对吗? > 另外,为什么我们不能只存储一份数据呢? > 非常感谢与您交流! > > > > > | | > 张浩 > | > | > 邮箱:[hidden email] > | > > 签名由 网易邮箱大师 定制 > > 在2020年07月06日 13:46,Congxian Qiu 写道: > Hi > 现在的实现是这样的,每条数据会在每个窗口中存一份 > > Best, > Congxian > > > 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > > Hi,all! > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > 份? > > > | | > 张浩 > | > | > [hidden email] > | > 签名由网易邮箱大师定制 > > |
In reply to this post by Jimmy Zhang
| 为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide
可以使用blink 的SQL,是通过pane 实现的,输出的时候才合并每个pane。参考`PanedWindowAssigner` 张浩 <[hidden email]> 于2020年7月6日周一 下午12:49写道: > Hi,all! > 由于第一次咨询,我不确定上一份邮件大家是否收到。 > 想咨询下大家,为什么使用 datastream api 的话,滑动窗口对于每条数据都会在 state 中存 size / slide > 份? > > > | | > 张浩 > | > | > [hidden email] > | > 签名由网易邮箱大师定制 -- ************************************** tivanli ************************************** |
Free forum by Nabble | Edit this page |