Also FYI: Current work includes incremental checkpointing so that large
state checkpoints require less bandwidth and storage.


On Mon, Feb 27, 2017 at 5:53 PM, Aljoscha Krettek <aljos...@apache.org>
wrote:

> Hi,
> just to throw in my 2 cents: if your window operations don't require that
> all elements are kept as they are you can greatly reduce your state size by
> using a ReduceFunction on your window. With this, the state size would
> essentially become <per-item-size> * <num keys> * <num windows>.
>
> Best,
> Aljoscha
>
> On Sun, 26 Feb 2017 at 14:16 Timur Shenkao <t...@timshenkao.su> wrote:
>
>> Hi,
>>
>> 100 million rows is small load, especially for 1 week.
>> I suspect that your load would be quite evenly distributed during the day
>> as it's plant not humans.
>> If you look for reliability, make 2 Kafka servers at least where each
>> topic has 6 partitions. And separate Hadoop cluster for Flink.
>>
>> As for duplicate messages, it's not a problem of Flink or Cassandra. It's
>> a logical problem, i.e. it's up to you how to achieve exactly once
>> semantics.
>> I advise you to use some storage anyway for reliability and failover.
>>
>> Sincerely yours, Timur Shenkao
>>
>>
>> On Friday, February 24, 2017, Patrick Brunmayr <j...@kpibench.com> wrote:
>>
>> Hi
>>
>> Yes it is and would be nice to handle this with Flink :)
>>
>> -
>> *Size of data point*
>> The size of a data point is basically just a simple case class with two
>> fields in a 64bit OS
>>
>> case class MachineData(sensorId: String, eventTime:Long)
>>
>> *- Last write wins*
>>
>> We have cassandra as data warehouse but i was hoping i could solve that
>> issue in the state level rather than in the db level. The reason beeing is
>> one could send me the same events
>> over and over again and this will cause that state to blow up until out
>> of memory. Secondly by doing aggregations per sensor results will be wrong
>> due multiple events with the same
>> timestamp.
>>
>> thx
>>
>>
>>
>>
>>
>> 2017-02-24 17:47 GMT+01:00 Robert Metzger <rmetz...@apache.org>:
>>
>> Hi,
>> sounds like a cool project.
>>
>> What's the size of one data point?
>> If one datapoint is 2 kb, you'll have 100 800 000 * 2048 bytes = 206
>> gigabytes of state. That's something one or two machines (depending on the
>> disk throughput) should be able to handle.
>>
>> If possible, I would recommend you to do an experiment using a prototype
>> to see how many machines you need for your workload.
>>
>> On Fri, Feb 24, 2017 at 5:41 PM, Tzu-Li (Gordon) Tai <tzuli...@apache.org
>> > wrote:
>>
>> Hi Patrick,
>>
>> Thanks a lot for feedback on your use case! At a first glance, I would
>> say that Flink can definitely solve the issues you are evaluating.
>>
>> I’ll try to explain them, and point you to some docs / articles that can
>> further explain in detail:
>>
>> *- Lateness*
>>
>> The 7-day lateness shouldn’t be a problem. We definitely recommend
>> using RocksDB as the state backend for such a use case, as you
>> mentioned correctly, the state would be kept for a long time.
>> The heavy burst when your locally buffered data on machines are
>> sent to Kafka once they come back online shouldn’t be a problem either;
>> since Flink is a pure data streaming engine, it handles backpressure
>> naturally without any additional mechanisms (I would recommend
>> taking a look at http://data-artisans.com/how-flink-handles-backpressure/
>> ).
>>
>> *- Out of Order*
>>
>> That’s exactly what event time processing is for :-) As long as the event
>> comes in before the allowed lateness for windows, the event will still
>> fall
>> into its corresponding event time window. So, even with the heavy burst of
>> the your late machine data, they will still be aggregated in the correct
>> windows.
>> You can look into event time in Flink with more detail in the event time
>> docs:
>> https://ci.apache.org/projects/flink/flink-docs-
>> release-1.3/dev/event_time.html
>>
>> *- Last write wins*
>>
>> Your operators that does the aggregations simply need to be able to
>> reprocess
>> results if it sees an event with the same id come in. Now, if results are
>> sent out
>> of Flink and stored in an external db, if you can design the db writes to
>> be idempotent,
>> then it’ll effectively be a “last write wins”. It depends mostly on your
>> pipeline and
>> use case.
>>
>> *- Computations per minute*
>> I think you can simply do this by having two separate window operators.
>> One that works on your longer window, and another on a per-minute basis.
>>
>> Hope this helps!
>>
>> - Gordon
>>
>> On February 24, 2017 at 10:49:14 PM, Patrick Brunmayr (j...@kpibench.com)
>> wrote:
>>
>> Hello
>>
>> I've done my first steps with Flink and i am very impressed of its
>> capabilities. Thank you for that :) I want to use it for a project we are
>> currently working on. After reading some documentation
>> i am not sure if it's the right tool for the job. We have an IoT
>> application in which we are monitoring machines in production plants. The
>> machines have sensors attached and they are sending
>> their data to a broker ( Kafka, Azure Iot Hub ) currently on a per minute
>> basis.
>>
>> Following requirements must be fulfilled
>>
>>
>>    - Lateness
>>
>>    We have to allow lateness for 7 days because machines can have down
>>    time due network issues, maintenance or something else. If thats the case
>>    buffering of data happens localy on the machine and once they
>>    are online again all data will be sent to the broker. This can result
>>    in some relly heavy burst.
>>
>>
>>    - Out of order
>>
>>    Events come out of order due this lateness issues
>>
>>
>>    - Last write wins
>>
>>    Machines are not stateful and can not guarantee exactly once sending
>>    of their data. It can happen that sometimes events are sent twice. In that
>>    case the last event wins and should override the previous one.
>>    Events are unique due a sensor_id and a timestamp
>>
>>    - Computations per minute
>>
>>    We can not wait until the windows ends and have to do computations on
>>    a per minute basis. For example aggregating data per sensor and writing it
>>    to a db
>>
>>
>> My biggest concern in that case is the huge lateness. Keeping data for 7
>> days would result in 10080 data points for just one sensor! Multiplying
>> that by 10.000 sensors would result in 100800000 datapoints which Flink
>> would have to handle in its state. The number of sensors are constantly
>> growing so will the number of data points
>>
>> So my questions are
>>
>>
>>    - Is Flink the right tool for the Job ?
>>
>>    - Is that lateness an issue ?
>>
>>    - How can i implement the Last write wins ?
>>
>>    - How to tune flink to handle that growing load of sensors and data
>>    points ?
>>
>>    - Hardware requirements, storage and memory size ?
>>
>>
>>
>> I don't want to maintain two code base for batch and streaming because
>> the operations are all equal. The only difference is the time range! Thats
>> the reason i wanted to do all this with Flink Streaming.
>>
>> Hope you can guide me in the right direction
>>
>> Thx
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>

Reply via email to