Another great confusion is caused by the fact that you can mix batch and realtime objects in many cases.
Some cases are obvious like you can lookup rows in a table either via the lookup_ext() function or joining it as source table to the input message.
Can you use a Message Source in a batch job? No way, how would the message start the job?
But everything else is possible, like a batch job creating many realtime messages, one for each output row.