Concrete answer for the pieces you asked about, from a similar build (loyalty/membership 360 profile at bank scale - different domain, same shape of problem):
Data model: model this as classic medallion, but the key decision is at silver/gold - use a Type 2 SCD dimension table for the visitor/member profile (so you can answer "what did engagement look like at the time of the renewal decision," not just "what does it look like today"), plus a fact table for events (check-ins, app interactions) partitioned by event_date and clustered on visitor_id. Keep the "360 profile" as a materialized gold table that's a point-in-time aggregate over the fact table, refreshed incrementally - don't try to maintain it as a single mutable wide table you update in place, that gets you into merge-conflict/locking pain at volume.
Streaming vs batch: use Structured Streaming (or DLT streaming tables) for check-in/app-interaction ingestion specifically because "near real time" is a stated requirement - Auto Loader into bronze Delta, then a streaming DLT pipeline bronze to silver with expectations for data quality. Ticketing/membership sign-up data is lower-volume and less time-sensitive, so batch (even daily) is fine there - don't force everything into streaming just for consistency, it adds ops overhead you don't need for slow-changing dimensions.
DLT specifically: worth using for the bronze-to-silver hop because of built-in expectations (data quality gating) and the lineage/observability you get for free - useful when you're feeding renewal-prediction models downstream and need to trust the inputs.
Performance: for the fact table at "millions of events," liquid clustering on visitor_id (or event_date + visitor_id) beats manual Z-ordering for a table that's growing continuously - you don't have to re-run OPTIMIZE with the same care. Photon helps a lot on the aggregation queries feeding dashboards.
One thing to decide early: whether the recommendation/renewal models read from the gold Delta tables directly (via Feature Engineering in Unity Catalog) or need a separate serving layer - that decision affects how wide vs narrow you want the gold tables.